Tôi đang gặp sự cố khi tôi cập nhật mối quan hệ nhiều-nhiều trong chuỗi nền, hoạt động tốt trong luồng đó, nhưng khi tôi gửi đối tượng trở lại chính chuỗi các thay đổi không hiển thị. Nếu tôi đóng ứng dụng và mở lại dữ liệu sẽ được lưu và các thay đổi sẽ hiển thị trên chuỗi chính. Cũng sử dụng [bối cảnh khóa] thay vì một bối cảnh đối tượng được quản lý khác hoạt động tốt.Đồng bộ hóa chủ đề bối cảnh đối tượng được quản lý dữ liệu lõi
Tôi đã thử NSManagedObjectContext:
- (BOOL)save:(NSError **)error;
- (void)refreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag;
ở các giai đoạn khác nhau trong suốt quá trình nhưng nó không có vẻ để giúp đỡ.
mã dữ liệu cốt lõi của tôi sử dụng các phương thức getter sau để đảm bảo bất kỳ hoạt động là chủ đề an toàn:
- (NSManagedObjectContext *) managedObjectContext
{
NSThread * thisThread = [NSThread currentThread];
if (thisThread == [NSThread mainThread])
{
//Main thread just return default context
return managedObjectContext;
}
else
{
//Thread safe trickery
NSManagedObjectContext * threadManagedObjectContext = [[thisThread threadDictionary] objectForKey:CONTEXT_KEY];
if (threadManagedObjectContext == nil)
{
threadManagedObjectContext = [[[NSManagedObjectContext alloc] init] autorelease];
[threadManagedObjectContext setPersistentStoreCoordinator: [self persistentStoreCoordinator]];
[[thisThread threadDictionary] setObject:threadManagedObjectContext forKey:CONTEXT_KEY];
}
return threadManagedObjectContext;
}
}
và khi tôi vượt qua đối tượng giữa các chủ đề Tôi đang sử dụng
-(NSManagedObject*)makeSafe:(NSManagedObject*)object
{
if ([object managedObjectContext] != [self managedObjectContext])
{
NSError * error = nil;
object = [[self managedObjectContext] existingObjectWithID:[object objectID] error:&error];
if (error)
{
NSLog(@"Error makeSafe: %@", error);
}
}
return object;
}
Bất kỳ giúp đánh giá cao
Chỉnh sửa: Tôi đã bỏ lỡ rằng bạn đã sử dụng threadDictionary trước đó. – Wendel