2013-05-08 41 views
1

我不知道您是否可以幫助我理解如何使此代碼「listen」從simperium更改。當使用NSFetchedResultsController這一切都會自動發生,但我將如何處理以下代碼?試圖閱讀文件,但它不是很清楚。如何使用simperium「偵聽」特定對象的更改

NSError *error; 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
fetchRequest.entity = [NSEntityDescription entityForName:kPersonEntity inManagedObjectContext:self.managedObjectContext]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == queen"]; 
NSArray *array = [[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] filteredArrayUsingPredicate:predicate]; 

if(array.count > 0) { 
    _queen = (Person *)[array objectAtIndex:0]; 
} 

謝謝!

+0

我迷路了。你試圖聆聽變化的對象究竟是什麼? – Alex 2013-05-08 08:51:58

回答

1

您可以收聽NSManagedObjectContextDidSaveNotification通知並採取相應的行動。一旦Simperium處理並保存任何更改,您將收到NSManagedObjectContextDidSaveNotification通知。聽吧:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contextSaved:) name:NSManagedObjectContextDidSaveNotification object:ctx]; 

然後,在你contextSaved:方法,你篩選出你關心

- (void)contextSaved:(NSNotification *)n 
    { 
     NSDictionary *userInfo = [n userInfo]; 
     NSSet *objects = <see NSManagedObjectContext Change Notification User Info Keys> 
     <filter/process objects> 
    } 

同樣的對象,不要忘記removeObserver

[[NSNotificationCenter defaultCenter] removeObserver:self]; 
+0

非常感謝,現在我明白它是如何工作的,只是使用'handleContextObjectsDidChangeNotification'來代替它,並且它按預期工作! – 2013-05-16 10:17:04

0

你最好的選擇是看看SPBucketDelegate.h。您可以在任何SPBucket上設置delegate,並直接從Simperium接收各種通知。

此方法是首選,因爲它確保您不會對Simperium在幕後執行的數據管理產生不利影響。

相關問題