Tag: icloud

在应用程序委托中添加持久性存储(启用iCloud)时发生崩溃

我将开始更新,以帮助那些寻求使用这个作为他们自己的个人代码的参考。 最新的更新 我相当肯定,我find了一种方法,一旦他们停止了对方的谈话,重新同步设备。 我将在下面更新我的答案和所有的细节。 我希望大家都觉得这很有帮助。 经过近两个月的摸索才能确定这一点。 所以请参考和分享与其他人有类似的问题,让设备再次通过iCloud相互交谈。 我花了很长的时间才弄明白这一切,所以我非常乐意尽可能地让更多的开发者从创build自己的make-shift修复程序中解脱出来。 另外帮助正确设置 我发现在更新应用程序后,与该帐户关联的iCloud数据可能会导致崩溃,因为iCloud数据将尝试立即合并到设备中(设备尚未设置其持久性存储)。 我现在增加了@property (nonatomic, readwrite) BOOL unlocked; 到AppDelegate.h和@synthesize unlocked; 到AppDelegate.m 。 然后,我更改了我的- (NSPersistentStoreCoordinator *)persistentStoreCoordinator方法以及我的- (void)mergeChangesFrom_iCloud方法,这两个方法将在下面显示(中间为持久性存储设置,下方为iCloud合并方法)。 本质上,我告诉应用程序,以防止iCloud合并数据,直到应用程序build立其持久存储。 否则,您会看到由于无法读取的故障导致的应用程序崩溃。 以下是我如何设置我的persistentStoreCoordinator: – (NSPersistentStoreCoordinator *)persistentStoreCoordinator { if (__persistentStoreCoordinator != nil) { return __persistentStoreCoordinator; } // here is where you declare the persistent store is not prepared; self.unlocked = NO; NSURL *storeURL […]

Xcode 6 iOS 8 iCloud核心数据设置

有没有人在Xcode 6和iOS 8上有iCloud核心数据同步设置? (希望这不是一个重复的职位) iCloud核心数据存储选项去了哪里? 我记得Core Data有一个额外的存储选项,称为核心数据存储,但现在在Xcode 6中,似乎只有在启用Xcode 6中的iCloud切换时才显示键值和文档存储。 背景信息 新的iPad应用程序 Xcode 6 针对最低版本的iOS 7,但希望它也适用于iOS 8? (我们可以将iOS 8设置为最低) 想要使用iCloud Core Data存储,而不是键值或文档存储。 已经在设置> iCloud中为Simulator和iPad设备login了相同的Apple帐户 我的configuration文件用于代码签署应用程序启用了iCloud的开发和分配(由Xcode自动启用) 我的设置 到目前为止,我不知道我是否正确设置了Core Data iCloud。 Xcode似乎已经在iOS Developer Portal中设置了iCloud容器: iCloud.com.xxxxxx.xxxxxxxx (note: I've replaced the actual strings with xxxx here) 我的Xcode 6 iCloud“服务”列表显示旁边没有刻度: 键值存储 iCloud文档 CloudKit 我们现在应该使用哪一个,因为它没有列出“核心数据”作为存储选项? 在“服务”正下方的“容器”中,它显示以下灰色的选项: 使用默认容器(默认情况下打勾) 指定自定义容器 iCloud.com.xxxxxxxxxx.xxxxxxxxx(再次用xxxxreplace真实标识符) 我不能select任何选项,似乎迫使我“使用默认容器”。 最后,Xcode似乎显示为: 将“iCloud”权利添加到您的应用程序ID […]

iCloud和GEOResourceManifestServerRemoteProxy:与地理位置警告的连接丢失

我正在testing使用iCloud应用程序。 有时,当我启动应用程序时,在控制台中出现以下警告: GEOResourceManifestServerRemoteProxy: Lost connection to geod 一旦我得到这个警告,我似乎并没有从iCloud获得任何数据。 我试图寻找这个问题,但发现很less的信息。 有关如何尝试检测此问题并尝试处理它的任何build议?

更多的iCloud核心数据同步的困境

所以,它终于发生了。 对于任何独立的iPhone开发者来说,最糟糕的情况是 升级我的应用后,有几个用户报告完全丢失数据 。 iCloud核心数据同步不起作用。 我的用户正在使用这个应用程序部分运行他们的业务。 这真是一场灾难性的失败 。 我改变的唯一与iCloud相关的事情是将键值存储添加到iCloud。 核心数据代码保持完全一样,相同的型号版本(不迁移)等 在我的testing中,一切都很好用! 但令我沮丧的是,用户报告说他们的数据在他们打开更新的应用程序时已经不存在了。 这可能是什么原因? 持久存储URL (无处不在的URL)不应该改变。 合并冲突也不太可能,因为在更新之前应该出现这个问题。 一些干扰新的无处不在的键值存储也许? (我几乎排除了这一点。) 下面请find我的托pipe对象模型和持久存储的代码。 让我知道你是否需要别的什么来评估这个问题。 – (NSManagedObjectContext *)managedObjectContext { if (managedObjectContext_ != nil) { return managedObjectContext_; } NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; if (coordinator != nil) { managedObjectContext_ = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; [managedObjectContext_ performBlockAndWait:^{ [managedObjectContext_ setPersistentStoreCoordinator:coordinator]; if (useICloud) { [managedObjectContext_ […]

iCloud基础知识和代码示例

作为初学者,我正在与iCloud苦苦挣扎。 有一些样本,但通常是非常详细的(在开发者论坛上有一个用于iCloud和CoreData的是巨大的)。 苹果文档是可以的,但我仍然看不到大的图片。 所以请耐心等待,其中一些问题是相当基本的,但可能很容易回答。 上下文:我有一个非常简单的iCloud应用程序运行(下面的完整示例代码)。 显示给用户的只有一个UITextView,他/她的input保存在一个名为text.txt的文件中。 txt文件被推送到云,并提供给所有设备。 完美的作品,但: 主要问题:那些不使用iCloud的用户呢? 当我启动我的应用程序(请参阅下面的代码),我检查用户是否启用了iCloud。 如果启用iCloud,一切都很好。 该应用程序继续前进,并在云中寻找text.txt。 如果find,它将加载并显示给用户。 如果在云中没有findtext.txt,它只会创build一个新的text.txt文件,并将其显示给用户。 如果用户没有启用iCloud,则不会发生任何事情。 我将如何使非iCloud用户仍可以使用我的文本应用程序? 还是我简单地忽略它们? 我需要为非iCloud用户编写单独的函数吗? 即function,我只是从文档文件夹中加载一个text.txt? 苹果写道 : 在iCloud中对待文件的方式与对待应用沙箱中所有其他文件的方式相同。 但是,在我的情况下,没有“正常”的应用程序沙箱了。 它在云端。 或者,我总是首先从磁盘加载我的text.txt,然后检查与iCloud是否有更新的东西? 相关问题:文件结构 – 沙盒与云 也许我的主要问题是如何iCloud应该工作的根本误解。 当我创build一个UIDocument的新实例时,我将不得不覆盖两个方法。 首先- (BOOL)loadFromContents:(id)contents ofType:(NSString *)typeName error:(NSError **)outError从云中获取文件,然后-(id)contentsForType:(NSString *)typeName error:(NSError **)outError将文件导入到云中。 我是否必须将单独的函数合并到一起,这些函数还将text.txt的本地副本保存到我的沙盒中? 这是否适用于非iCloud用户? 据我了解iCloud,它会自动保存text.txt的本地副本。 所以我不需要任何东西保存任何东西到我的应用程序的“旧”沙箱(即,因为它曾经是在旧的iCloud日子之前)。 现在,我的沙箱完全是空的,但是我不知道这是否正确。 我应该在那里保留另一个text.txt的副本吗? 这感觉就像我的数据结构混乱…因为有一个在云中的text.txt,一个在我的设备上的iCloud沙箱(这将工作,即使我离线),第三个在旧的沙箱我的应用… 我的代码:一个简单的iCloud示例代码 这个松散的基础是我在开发者论坛和WWDC会话video中find的一个例子。 我把它剥离到最低限度。 我不确定我的MVC结构是否有用。 该模型是在AppDelegate这是不理想的。 任何build议,使其更好,是值得欢迎的。 编辑:我试图提取主要问题,并张贴在这里[这里]。 4 概述: […]

CoreData + iCloud +级联删除 – 如何处理?

CoreData实体“A”使用级联删除规则与CoreData条目“B”的集合具有一对多关系。 在iCloud环境中,当设备1显示“B”条目之一的详细视图时,设备2删除“A”条目。 当设备1接收到NSPersistentStoreDidImportUbiquitousContentChangesNotification通知时,其App Delegate调用mergeChangesFromContextDidSaveNotification ,然后广播由视图控制器捕获的内部通知,显示条目“B”的细节(代码使用performBlock )。 但是,尽pipe在详细视图控制器接收到内部通知时入口“A”确实无效,但条目“B”仍然作为有效的CoreData对象存在。 看来级联规则还没有完成。 因此,设备1中的视图控制器不知道删除,这可能会导致意外的结果。 mergeChangesFromContextDidSaveNotification出现提前返回,当基础数据已合并,但级联规则尚未完成。 当通知到达时,我尝试刷新条目“B”,同时暂时将pipe理对象上下文的stalenessInterval设置为零,以便caching的对象不会被使用,但是我仍然从商店获得有效的条目“B”。 在这一点上检查null条目“A”不是一个选项,因为情况比我在这里描述的要复杂一些,在某些情况下空条目“A”是有效的。 我试图在合并更改之后并在将内部通知发送到视图控制器之前引入延迟。 我发现延迟2秒没有帮助,但延迟10秒。 但我不想依赖这个延迟。 这是一个没有太多数据的testing环境,我不知道在生产环境中会发生什么。 依靠实验性延迟似乎不是正确的做法。 有没有正确的事情? 还是我做错了,开始?

使用核心数据,iCloud和CloudKit进行同步和备份,以及如何协同工作

我正在创build一个应用程序,我想要保存,同步和备份数据的早期阶段。 该应用程序不会存储任何文件只是数据库中的数据。 这将是iOS 8和以上,所以我能够使用CloudKit。 我做了一些研究,但仍不清楚Core Data,iCloud和CloudKit是如何协同工作的。 据了解,CloudKit只是从云端获取数据和从云端获取数据的一种方式。 CloudKit是与iCloud同步数据的另一种方式吗? 我的问题是: 如果我使用CloudKit,是否还需要创build本地核心数据库? 如果是,它会自动与iCloud同步,或者我将不得不调用方法来存储到两个地方? 如果数据只存储在云中,那么当iOS设备没有连接到互联网时,用户将能够访问它。 我读到,CloudKit只有有限的caching。 如果iCloud帐户未启用,这将如何工作。 如果有人能够在保存并同步核心数据库的同时离线和在线地分解每项技术所做的工作。 我目前的理解是: 核心数据用于本地存储数据 iCloud同步数据并存储在云中 CloudKit能够存储和pipe理云中的数据? 我希望我提供了足够的信息,不要closures这个问题。