Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在我的应用程序上启用iCloud时,现有核心数据数据库未上载到iCloud_Ios_Uitableview_Core Data_Icloud - Fatal编程技术网

Ios 在我的应用程序上启用iCloud时,现有核心数据数据库未上载到iCloud

Ios 在我的应用程序上启用iCloud时,现有核心数据数据库未上载到iCloud,ios,uitableview,core-data,icloud,Ios,Uitableview,Core Data,Icloud,我在App Store中有一个简单的应用程序,它是一个UITableView,由用户填充一些UITextFields,在一个以模式调用的视图中。用户按下save,所有内容都保存到核心数据,并使用nsfetchedResultsController,更新UITableView 我现在正在更新我的应用程序,引入iCloudsynching(和一个iPad版本) 我是iCloud开发的新手,虽然我所关注的帖子已经有几年了,但它主要对我有用 问题 在不深入讨论其他问题的情况下,我现在面临的一个问题是,如

我在App Store中有一个简单的应用程序,它是一个
UITableView
,由用户填充一些
UITextField
s,在一个以模式调用的视图中。用户按下save,所有内容都保存到核心数据,并使用
nsfetchedResultsController
,更新
UITableView

我现在正在更新我的应用程序,引入
iCloud
synching(和一个iPad版本)

我是
iCloud
开发的新手,虽然我所关注的帖子已经有几年了,但它主要对我有用

问题

在不深入讨论其他问题的情况下,我现在面临的一个问题是,如果我使用一些数据(没有启用iCloud)运行应用商店版本的应用程序,当我使用Xcode中的开发构建更新我的应用程序时,我希望我的原始数据仍然存在,并因此上传到iCloud

我的应用程序中没有一个复选框,上面写着“不要上传”,但我会去做的。现在的问题是,当我更新我的应用程序时,我从一个完全空白的数据库开始,尽管我怀疑这只是我的代码现在实际显示数据的问题,因为在我的设备设置中,它显示了存储在iCloud中的9.7KB的数据(我在进行此测试之前确保删除了iCloud备份数据)

我在开发人员门户中调整了我的应用程序Id以包含iCloud,并将Xcode调整为包含iCloud,同时在开发人员中创建新的SSL证书,并将新的资源调配配置文件添加到Xcode中

更新:对我的应用程序进行了大量更改并删除了旧代码

这是我的
应用程序代表
persistentStoreCoordinator
code:(按照Tom的回答给出的建议)

但是,在运行我的应用程序时,该应用程序会因以下原因崩溃:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'nil is not a valid persistent store' on the 

    store = [_persistentStoreCoordinator migratePersistentStore:ps toURL:url options:iCloudOptions withType:NSSQLiteStoreType error:&error];
问题

所以问题是,当我的应用程序的应用商店版本中有一些数据,然后更新到这个版本时,首先应用程序会像上面那样崩溃,但是一旦我修复了这个问题,我希望我现有的数据被迁移到云上

对此的任何指导都将不胜感激

在不深入讨论其他问题的情况下,我现在面临的一个问题是,如果我使用一些数据(没有启用iCloud)运行应用商店版本的应用程序,当我使用Xcode中的开发构建更新我的应用程序时,我希望我的原始数据仍然存在,并因此上传到iCloud

不是那么简单。Core Data的iCloud集成使用事务日志同步更改。每次保存对持久存储文件的更改时,都会生成事务日志。如果仅在现有数据存在时添加iCloud支持,则不会为该数据生成任何事务。没有事务日志,没有同步,您的数据保持本地

要将现有数据移动到iCloud,您需要在为所有现有数据生成事务的过程中将永久存储迁移到新文件。最简单的方法是调用
[NSPersistentStoreCoordinator migratePersistentStore:toURL:options:withType:error:
,它采用与添加持久存储文件时相同的选项。将本地存储迁移到新的支持iCloud的存储,如果一切正常,您将获得事务日志并上传数据


如果持久存储非常大,则可能需要使用自定义迁移代码。不过,大多数时候,内置迁移方法都很好。

iCloud核心数据在ios7中发生了很大变化。任何早于此的指南都是过时的,不应遵循。此外,苹果自己也建议不要尝试混合使用iCloud支持的应用程序,这些应用程序运行iOS 7和更旧版本。找到一个ios7指南并遵循它。刚才Objc.io有一个很好的例子。亲爱的@jrturton-非常感谢您的回复。好消息是,我在应用程序中只使用iOS 7,不能在其他版本之间工作,我在几分钟前你提到的网站上找到了一篇文章:。不幸的是,对于新手来说,虽然它包含了代码,但它并没有确切说明需要插入到哪里。。我是否应该引用那篇文章提出一个新的问题?亲爱的汤姆,非常感谢,这很有意义。在仅iOS 7的应用程序中也是这样,现有的本地数据基本上需要首先迁移到云上吗?如果是这样的话,这是有意义的,我唯一不确定的是migratePersistentStore要使用什么参数-它想要将一个NSPersistentStore作为参数-我应该创建一个实例并在调用它之前将其设置为nil吗?我想我需要创建类似这样的东西:NSPersistentStore*store=[[\u persistentStoreCoordinator persistentStores]firstObject];在persistentStore中,但当我运行代码migratePersistent时,它会崩溃并显示“nil不是有效的持久存储”。这是您需要做的,但在此之前,您需要使用旧的非iCloud选项添加持久存储,以便有一个
NSPersistentStore
要迁移。因此(a)添加没有iCloud的存储,然后(b)迁移到iCloud。谢谢Tom,我对这么多问题感到非常抱歉。你的答案当然会被接受。考虑到你所说的,我继续更新了问题,以反映我的代码和我认为的方法。但是我遇到了崩溃。这对我来说都是非常新的,所以迁移方面似乎很接近..但还没有完全达到!代码中的问题是您添加了两次相同的持久存储。第二次是错误,因此失败,但您没有检查错误状态,因此没有注意到这一点。您应该放弃对
addPersistentStore:etc:
的第二次冗余调用。
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'nil is not a valid persistent store' on the 

    store = [_persistentStoreCoordinator migratePersistentStore:ps toURL:url options:iCloudOptions withType:NSSQLiteStoreType error:&error];