Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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 无法使用CoreData更新数据_Ios_Objective C_Database_Sqlite_Core Data - Fatal编程技术网

Ios 无法使用CoreData更新数据

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

我编写了一个Mac应用程序来生成sqlite文件,然后将其复制到iOS应用程序

当我想在iOS应用程序中更改某些数据时,我发现更改无法保存

错误为:
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