![](/img/trans.png)
[英]Swift - How to get the last modification date of file via HTTP on iPhone
[英]Entity last modification date
獲得整個Enity的最后修改日期是否有任何解決方案? 由於應用程序與Web服務同步(其中一些將在具有較舊日期的數據庫中),因此每個NSManagedObject
時間戳將不是一個好的解決方案。
每次用戶決定更新列表時,我都需要為整個實體創建一個時間戳,這樣我就可以在SSPullToRefresh
顯示這個日期。
我腦子里只有一個解決方案: NSUserDefaults
但它是保持實體上次修改日期的好地方嗎?
實現此目的的一種方法是創建一個實體,其唯一目的是跟蹤實體的修改。 它可能看起來像:
LastModified:
date (NSDate*)
key (NSString*)
您可以將key
屬性視為實體名稱
您可以在啟動時填充這些實體(如果需要)。
您還可以創建一個全局字典,在啟動時將其key
映射到其objectID
。
您使用此對象的方式是:
當您開始同步操作時,您將獲取應更新的實體並將其設置為當前日期,如果您知道哪些實體將更新(更好地反映現實)。
如果沒有,則在保存之前查看上下文的所有更新,插入,刪除的集合,並創建一組已更改的實體類型,並更新與這些鍵(實體名稱)對應的LastModified
對象。
這種方法的好處是:
壞處:
key
實體(並且您不知道在同步中將更新哪些密鑰),則維護起來會更復雜(您可能希望使用實體userInfo
字典存儲key
以便不同的實體可以更新相同的修改日期) 我過去使用的策略是查找實體類型最近修改的記錄。
因此,假設您有一個聯系實體,並且您希望同步上次執行同步時的任何更改。 查詢所有本地聯系人記錄,並按lastModifiedDate
按降序對其進行排序。 返回的第一個結果是您在查詢Web服務時要使用的時間戳。
在編寫本教程“ 如何使用Web服務同步核心數據”時,我使用了此策略
我發現的最大優勢是您無需擔心確保服務器時間與設備的本地時間同步。 如果它們在幾分鍾后關閉,你就不會“錯過”任何東西。
您可以保持簡單並使用NSUserDefaults
。 您可以向NSManagedObjectContextWillSave
通知添加觀察者。 然后,使用Class
的NSString
名稱創建/更新NSDate
對象。 我在我的AppDelegate
有這個:
在應用程序中:didFinishLaunchingWithOptions:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mocWillSave:)
name:NSManagedObjectContextWillSaveNotification
object:self.managedObjectContext];
選擇
- (void)mocWillSave:(NSNotification*)note {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// Get array of classes that have been updated.
// This way, we don't loop through every updated Object...just the
// unique classes in the updatedObjects set.
NSArray *updatedObjectClasses = [self.managedObjectContext.updatedObjects valueForKeyPath:@"class"];
for (id obj in updatedObjectClasses) {
[userDefaults setObject:[NSDate date] forKey:obj];
}
[userDefaults synchronize];
}
注意:這當然只涉及到updatedObjects
。 你當然可以對insertedObjects
做同樣的事情。
我傾向於避免NSUserDefaults
總是感覺像混合蘋果和橘子。
當我需要存儲這樣的信息時,我喜歡把它放在NSPersistentStore
本身的元數據中。 這樣它就附加到我正在與Web服務同步的文件中。
NSPersistentStoreCoordinator
上有一些方法允許您訪問元數據並對其進行更改。 然后,如果文件被移植到另一個設備(比如在恢復或其他設備中),元數據就會隨之移動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.