Ios 无法使用CoreData更新数据
我编写了一个Mac应用程序来生成sqlite文件,然后将其复制到iOS应用程序 当我想在iOS应用程序中更改某些数据时,我发现更改无法保存 错误为:Ios 无法使用CoreData更新数据,ios,objective-c,database,sqlite,core-data,Ios,Objective C,Database,Sqlite,Core Data,我编写了一个Mac应用程序来生成sqlite文件,然后将其复制到iOS应用程序 当我想在iOS应用程序中更改某些数据时,我发现更改无法保存 错误为:error Domain=nscocaerorrordomain code=134030 在Mac上创建sqlite的代码: NSManagedObjectModel *mode = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelPath]; NSPersistentStoreCoo
error Domain=nscocaerorrordomain code=134030
在Mac上创建sqlite的代码:
NSManagedObjectModel *mode = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelPath];
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mode];
NSDictionary *options = @{
NSReadOnlyPersistentStoreOption : @YES,
NSSQLitePragmasOption: @{@"journal_mode":@"DELETE"}
};
[coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:sqlitePath options:options error:nil];
NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
managedObjectContext.persistentStoreCoordinator = coordinator;
managedObjectContext.undoManager = nil;
[managedObjectContext performBlockAndWait:^{
for (ClipCard *currentCard in self.allCards)
{
ClipItem *clipInfo = [NSEntityDescription insertNewObjectForEntityForName:@"ClipItem" inManagedObjectContext:managedObjectContext];
clipInfo.clipName = currentCard.clipName;
}
[managedObjectContext save:nil];
[managedObjectContext reset];
}];
iOS上的读取和更改代码:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator == nil)
{
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];
NSURL *storeClipData = [[NSBundle mainBundle] URLForResource:@"ClipItems" withExtension:@"sqlite"];
NSDictionary *options = @{
NSReadOnlyPersistentStoreOption : @YES,
NSSQLitePragmasOption: @{@"journal_mode":@"DELETE"}
};
[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeClipData options:options error:nil];
}
return _persistentStoreCoordinator;
}
//fetch data
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"ClipItem"];
fetch.returnsObjectsAsFaults = false;
NSError *error = nil;
self.clipItems = [self.managedObjectContext executeFetchRequest:fetch error:&error];
//change some
if ([self.managedObjectContext hasChanges])
{
NSError *error = nil;
[self.managedObjectContext save:&error];
NSLog(@"save error: %@", error);
}
希望我已经说清楚了,如果有任何帮助,我们将不胜感激
顺便说一句,我不知道为什么我的堆栈溢出帐户无法登录,所以我注册了一个新帐户。您正在尝试写入应用程序包中的数据库,它是只读的。您需要使用NSFileManager将sqlite文件复制到一个读/写文件夹,例如Documents文件夹,然后从那里打开数据库。是的,我考虑过了,尝试过,但失败了,我会再次尝试。谢谢。什么也没发生,有些错误134030