嗨,我有一個FriendsViewController,我顯示從coreData獲取的朋友記錄。我有另一個視圖控制器AddFriendViewController這是由FriendsViewController添加一個新的朋友,它保存在其中的上下文。我正在收聽FriendsViewController中共享MOC的更改通知。多次調用NSManagedObjectContextDidSaveNotification
[[NSNotificationCenter defaultCenter]
addObserverForName:NSManagedObjectContextDidSaveNotification
object:appdelegate.context queue:nil
usingBlock:^(NSNotification * _Nonnull note) {
NSLog(@"Re-Fetch Whole Friends Array from core data and Sort it with UILocalizedIndexedCollation and reloadData into table");
}];
在AddFriendsViewController只需要創建一個朋友的對象,我
Friend *friend= [NSEntityDescription
insertNewObjectForEntityForName:@"Friend"
inManagedObjectContext:appdelegate.context];
friend.name=nameTextfield.text;
[appdelegate.context save:&error];
[self.navigationController popViewControllerAnimated:YES];
現在,當我執行節省從AddFriendViewController上下文中FriendsViewController上述塊被觸發幾次,而不是一個時間這會導致更多的處理,因爲從核心數據中重新獲取整個數據。我無法使用Fetched Results Controller,因爲我使用UILocalizedIndexedCollation將我的數組排序。所以我的問題是爲什麼它被稱爲兩次或有時甚至三次?或者有沒有其他辦法呢?
你有沒有機會使用多個託管對象上下文,並且它們之間有父/子關係? –
我已經想通了,我必須刪除這個觀察者,我在didLoad中添加了這個觀察者,但不知道在哪裏刪除它? PS。我在這個視圖控制器後面有一個視圖控制器,所以每當我回到這個視圖時再添加一個觀察者。 –