Temel veri mantığımı RKManagedObjectStore'a taşıdığımdan beri ciddi sorunlarım var. I kurulum görünümü denetleyicisi ana parçacığı içinde [NSManagedObject managedObjectContext] ayarlanmış bağlamda bir NSFetchedResultsController:Restkit [NSManagedObject managedObjectContext] farklı örnekleri döndürür
assert([NSThread isMainThread]);
NSManagedObjectContext* context = [NSManagedObject managedObjectContext];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:[Item fetchRequest] managedObjectContext:context sectionNameKeyPath:nil cacheName:@"Master"];
Bu bağlamda gibi maddeler yerleştirmeye:
Item* item = [Item object];
item.name = @"Foo";
[[RKObjectManager sharedManager].objectStore save];
Ancak getirilen sonuçlar kontrol değişikliklerden haberdar edilmez. Böylece elle bildirim kayıtlı: RKManagedObjectStore farklı bağlamlarda genelinde değişiklikleri birleştirir beri
[[NSNotificationCenter defaultCenter] addObserverForName:NSManagedObjectContextDidSaveNotification object:nil queue:nil usingBlock:^(NSNotification *note) {
NSLog(@"Context changed");
[self.fetchedResultsController performFetch:nil];
[self.tableView reloadData];
}];
Bu
gerçekten, sanırım gerekli olmamalıdır. İkincisi, Öğe nesneyi silmek için ben Bu nesne başka kapsamında silinemez belirten bir hata üretti[item deleteEntity];
çalıştı. Bu kesinlikle doğru, ama NEDEN cehennem Ana Konu için aynı örnek değil mi? Sadece varlık tr silmeden önce görünümü Kontrolörün içinde ayrıca aşağıdaki çağrı:
assert([NSThread isMainThread]);
NSManagedObjectContext* sameContext1 = [NSManagedObject managedObjectContext];
NSManagedObjectContext* sameContext2 = self.fetchedResultsController.managedObjectContext;
assert(sameContext1 == sameContext2); //FAILS
[NSManagedObject managedObjectContext] kullanılırken denir RKManagedObjectStore en managedObjectContext alıcı Uygulama baktığımızda, iplik başına aynı örneği döndürülmelidir:
-(NSManagedObjectContext*)managedObjectContext {
NSMutableDictionary* threadDictionary = [[NSThread currentThread] threadDictionary];
NSManagedObjectContext* backgroundThreadContext = [threadDictionary objectForKey:RKManagedObjectStoreThreadDictionaryContextKey];
...
}