gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:59:41 29 4
gpt4 key购买 nike

我在 App Store 中有一个简单的应用程序,它是 UITableView由用户填写一些 UITextField 填充s 在模态调用的 View 中。用户按下保存,所有内容都保存到 Core Data 并使用 NSFetchedResultsControllers , UITableView已更新。

我现在正在更新我的应用程序以介绍 iCloud同步(和 iPad 版本)。

我是 iCloud 的新手发展,虽然我关注的帖子http://goddess-gate.com/dc2/index.php/post/452已经有几年了,它主要对我有用。

问题

在不进一步讨论其他问题的情况下,我现在遇到的一个问题是,如果我使用一些数据(未启用 iCloud)运行我的应用程序的 App Store 版本,当我更新我的应用程序时使用我在 Xcode 中的开发版本,我希望我的原始数据仍然存在并因此上传到 iCloud。

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

我在 Developer Portal 中调整了我的 App Id 以包含 iCloud,并调整 Xcode 以包含它,同时在 Developer 中创建新的 SSL 证书并将新的配置文件重要到 Xcode 中。

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

这是我的App Delegate persistentStoreCoordinator代码:(遵循汤姆回答的建议)

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Planner.sqlite"];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSDictionary *options = @{
NSMigratePersistentStoresAutomaticallyOption : @YES,
NSInferMappingModelAutomaticallyOption : @YES
};
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {

NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}

NSPersistentStore *ps = [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error];

NSFileManager *fm = [NSFileManager defaultManager];
NSURL *url = [fm URLForUbiquityContainerIdentifier:nil];
NSDictionary *iCloudOptions = @{
NSMigratePersistentStoresAutomaticallyOption : @YES,
NSInferMappingModelAutomaticallyOption : @YES,
NSPersistentStoreUbiquitousContentNameKey : @"EnvysStore"
};
NSPersistentStore *store = [[_persistentStoreCoordinator persistentStores] firstObject];

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

return _persistentStoreCoordinator;
}

但是,在运行我的应用程序时,应用程序崩溃:
*** 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];

问题

所以问题是,当我有我的应用程序的应用程序商店版本和一些数据然后更新到这个版本时,首先应用程序崩溃如上所述,但是一旦我得到修复,我希望我现有的数据被迁移到云.

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

最佳答案

Without going further into other issues, the one issue I'm having right now is the fact that if I'm running the App Store version of my app with some data (which doesn't have iCloud enabled), when I update my app using my development build in Xcode, I'm expecting my original data to still be there and to therefore upload to iCloud.



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

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

如果您的持久存储非常大,您可能需要使用自定义迁移代码。但大多数时候,内置的迁移方法就可以了。

关于ios - 在我的应用程序上启用 iCloud 时,现有核心数据数据库未上传到 iCloud,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23593344/

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