如何用simperium“监听”对特定对象的更改

时间:2013-05-08 08:39:30

标签: ios core-data simperium

我想知道您是否可以帮助我了解如何将此代码“listen”改为simperium。使用NSFetchedResultsController时,一切都会自动发生,但我如何处理以下代码?试图阅读该文件,但对我来说并不是很清楚。

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];
}

谢谢!

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分:0)

您最好的选择是查看SPBucketDelegate.h。您可以在delegate上设置SPBucket,并直接从Simperium接收各种通知。

这种方法是首选,因为它可以确保您无法对Simperium在幕后执行的数据管理产生负面影响。