我有一個問題,我怎麼能聽我的數據模型的變化。跟蹤NSManagedObject屬性,當它更新並立即更新視圖
我有財產進步NSManagedObject電子郵件。所以當應用程序發送電子郵件時,我每次都會更新屬性進度。
我想聽數據模型,如果更改更新我的觀點。
我說:
for (SAPEmail *email in _emails)
{
[self addObserver:email forKeyPath:@"progress" options:NSKeyValueObservingOptionNew context:NULL];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"progress"])
{
SAPEmail *email = object;
NSLog(@">>>>>>>>>>> progress: %@", email.progress);
}
}
,但似乎它並沒有爲我工作。
我也使用MagicalRecord。
我也試圖觀察情境
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(handleDataModelChange:)
name:NSManagedObjectContextObjectsDidChangeNotification
object:myManagedObjectContext];
但是,當我調試我的數據模型已經是被更新10次(因爲我更新0進步 - 9),但handleDataModelChange全部更新,其中後調用只有一次製作。但每次更新數據模型以更新進度視圖時,我都需要全部更新10次。
之一,如果我用這個
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(managedObjectContextDidSave:) name:NSManagedObjectContextDidSaveNotification object:nil];
,然後例如嘗試刷新數據的更多:
- (void)managedObjectContextDidSave:(NSNotification *)notification
{
NSLog(@">>>>>>>>>+++++");
_emails = [SAPCoreDataEmailHelper emailsWithStatus:EmailStatusInProgress];
[_theTableView reloadData];
}
+ (NSArray *)emailsWithStatus:(EmailStatus)status
{
NSPredicate *prediacte = [NSPredicate predicateWithFormat:@"status == %d", status];
NSArray *emails = [SAPEmail MR_findAllWithPredicate:prediacte];
return emails;
}
我可以看到如何工作的NSLog但後來我的應用程序是凍結。
謝謝你回答你,每次幫我)我有單身,給我發電子郵件,在這裏我使用魔法導入來設置所有屬性以及進度。在視圖控制器中的另一個對象中,我想觀察所有的電子郵件,並且在初始化此視圖控制器時,我使用SAPEmail MR_findAllWithPredicate。但我認爲,當核心數據發生變化時,我在視圖控制器中使用的電子郵件不知道它。因爲更改發生在上下文中,而不是通過MR_findAllWithPredicate獲得的對象。正確? – 2014-09-05 16:11:46
仍然無法觀察到 – 2014-09-05 16:49:07
我也更新了問題 – 2014-09-05 16:52:47