我沒有清楚地瞭解核心數據的工作原理。可能是這是我所面臨的結果。我有一個應用程序,其中我通過應用程序使用單個managedObjectContext。我知道managedObjectContext包含其中的所有managedObjects,直到我重置上下文爲止,該對象始終由上下文本身保留。所以,我所做的是獲取一些像用戶數據這樣的主要對象,然後繼續在整個視圖控制器中傳遞相同的對象。如果發生某些更改,則該對象將被其他代碼刷新。這在幾乎所有情況下都能很好地工作。核心數據和持有NSManagerObject
但是,我不保留任何視圖控制器中的對象的強指針。我只是保留了一個弱引用,因爲對象本身是由managedObjectContext池保留的。但是,當這個對象通過同步到遠程進行刷新時,我有時會遇到這種策略的問題。我弱指針變得毫無用處。它沒有數據。所有的屬性都變空了。雖然它顯示我登錄時的所有屬性名稱,但值僅爲零。我如何確保我的對象始終刷新並與主環境保持同步?這種做法保持指向managedObject的弱指針是一個壞主意。我會說我不保留它在任何viewcontroller。所有的視圖控制器都只使用弱指針。
我的代碼是這樣的,
在根視圖控制器我取數據,
-(void)tableView:(UITableView*)tv didSelectRowAtIndexPath:(NSIndexPath*)indexPath{
User *user = [self.fetchedResultsController objectAtIndexPath:indexPath];
FirstViewController *firstViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"firstViewController"];
firstViewController.user = user;
}
FirstViewController:
@interface FirstViewController:UIViewController
@property(nonatomic, weak) User *user
@end
我做很多事情與對象在此同時,我可能會從rootViewController更新對象。但是,由於它是同一個對象,它似乎在大部分時間都會更新。
然後再次在第一個視圖控制器;
-(void)tableView:(UITableView*)tv didSelectRowAtIndexPath:(NSIndexPath*)indexPath{
User *user = [self.fetchedResultsController objectAtIndexPath:indexPath];
SecondViewController *secondViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"secondViewController"];
}
SecondViewController:
@interface SecondViewController:UIViewController
@property(nonatomic, weak) User *user
@end
在這裏,對象是弱引用。我用這個對象做了很多事情,或者其他一些視圖控制器可以從遠程同步,但是它不斷更新。這個對象被傳遞到深層次直到最後一個視圖控制器,並且所有這些視圖控制器保持弱指針。
大部分時間都很好。但是,即使對象被同步到網絡中,在我當前的視圖控制器中很多時候,它看起來都是空的,我的意思是對象仍然存在於所有屬性描述中,但沒有值。但是,一段時間後突然出現。
可能發生了什麼。如何保持對象同步到根上下文並在發生任何更改時進行刷新?保持一個強大的指針,這將能夠解決我所有的問題。我想這可能是因爲對象沒有被錯誤。我怎樣才能排除某個對象中的某個對象,使其對所有其他對象都可見。
真的很感謝您的幫助和關心。我可能有一個不好的英語,但如果有人瞭解我的問題,並可以更好地表達,我也會很高興。:)