gpt4 book ai didi

ios - iCloud、Core Data 和来自 iOS 7 中网络服务的数据

转载 作者:行者123 更新时间:2023-11-28 22:11:14 24 4
gpt4 key购买 nike

我正在编写一个非常简单的应用程序,用于跟踪、存储和组织从 iTunes 和 RottenTomatoes 提供的电影。我把电影放在一个很大的背上,通常一次拉大约 150 部电影。然后,用户可以查看提要并将电影添加到自定义列表。

我遇到的问题是从网络中提取数据并与 iCloud 同步以生成电影副本。

我一直在考虑将电影提要分解到本地存储(从 iCloud 中删除),然后在单独的 iCloud 核心数据存储中创建列表和其他用户值,甚至使用 iCloud 键值存储(尽管保存电影列表可能会很粗糙)。

这是我第一个使用 iCloud 的应用程序,所以我使用了来自 this objc.io article 的一些样板文件.我做了一些修改,因为我的网络同步使用后台 NSManagedObjectContext 来完成工作。后台 MOC 保存,然后我的主 MOC 合并更改。UI 主要是 NSFetchedResultsControllers,所以整个系统工作得非常无缝。

这里是一些处理 iCloud NSNotifications 的代码

// happens when the main MOC saves
- (void)managedObjectContextDidSaveNotification:(NSNotification *)notification {
@synchronized(self) {
NSManagedObjectContext *moc = self.backgroundManagedObjectContext;

[moc performBlock:^{
[moc mergeChangesFromContextDidSaveNotification:notification];
}];
}
}

// happens when the bg MOC saves
- (void)backgroundManagedObjectContextDidSaveNotification:(NSNotification *)notification {
@synchronized(self) {
NSManagedObjectContext *moc = self.managedObjectContext;

[moc performBlock:^{
[moc mergeChangesFromContextDidSaveNotification:notification];
}];
}
}

- (void)persistentStoreDidImportUbiquitousContentChanges:(NSNotification *)notification {
@synchronized(self) {
NSManagedObjectContext *moc = self.managedObjectContext;

[moc performBlock:^{
[moc mergeChangesFromContextDidSaveNotification:notification];
}];
}
}

- (void)storesWillChange:(NSNotification *)notification {
NSManagedObjectContext *moc = self.managedObjectContext;

[moc performBlockAndWait:^{
NSError *error = nil;
if ([moc hasChanges] && [moc save:&error]) {
DDLogInfo(@"MOC saved succesfully");
}
else {
DDLogError(@"Error saving MOC: %@",error);
}
}];
}

- (void)storesDidChange:(NSNotification *)notification {}

我最初认为我可以在 iCloud 完成合并更改后添加一些逻辑,但这看起来不太可靠,因为我可能最终会陷入设备之间的更改循环。

关于如何使这成为可能的任何想法?我敢肯定以前有人这样做过,我只是找不到任何有用的资源。

最佳答案

如果我正确理解你的情况,用户可能几乎同时在两台不同的设备上下载同一部电影,并且在同步之后,你就有了该电影的副本。

Apple 针对这种情况的建议是在任何 iCloud 合并后简单地删除重复数据。您进行提取以查找具有相同电影 ID 的对象,然后以确定的方式对重复项进行排序,然后删除一个。如果您不对它们进行排序,您可能会在一台设备上删除一个对象,在另一台设备上删除另一个对象,最终没有任何对象。

这篇文章有查找重复的有效代码:http://www.atomicbird.com/blog/icloud-complications-part-2

如果您不喜欢整个合并后重复数据删除,可以使用 TICDS 这样的框架和 Ensembles允许您提供全局 ID,从而消除重复数据删除的必要性。 (披露:我开发 Ensembles)

关于ios - iCloud、Core Data 和来自 iOS 7 中网络服务的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22863898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com