Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/151.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
Objective c FMB数据库已锁定_Objective C_Fmdb - Fatal编程技术网

Objective c FMB数据库已锁定

Objective c FMB数据库已锁定,objective-c,fmdb,Objective C,Fmdb,因此,我创建了一个存储一些数据的应用程序。但是,每次调用我编写的delete函数,然后调用另一个函数后,我都会收到一个错误,说数据库已锁定 这就是功能: + (void)deleteRestaurants:(NSString *)number { FMDatabase *database = [sDatabase openUp]; [database open]; FMResultSet *rs = [database executeQuery:[NSString s

因此,我创建了一个存储一些数据的应用程序。但是,每次调用我编写的delete函数,然后调用另一个函数后,我都会收到一个错误,说
数据库已锁定

这就是功能:

+ (void)deleteRestaurants:(NSString *)number {
    FMDatabase *database = [sDatabase openUp];

    [database open];

    FMResultSet *rs = [database executeQuery:[NSString stringWithFormat:@"SELECT * FROM restaurants WHERE id='%@'", number]];
    if ([rs next]) {
        NSString *cloudKit = [rs stringForColumn:@"CloudKit"];

        NSLog(@"CloudKit is %@", cloudKit);

        CKRecordID *recordID = [[CKRecordID alloc] initWithRecordName:cloudKit];

        NSLog(@"recordID is %@", recordID);

        [[CKContainer defaultContainer].privateCloudDatabase deleteRecordWithID:recordID completionHandler:^(CKRecordID *recordID, NSError *error) {
            NSLog(@"%@", error);
        }];
    }

    NSString *query = [NSString stringWithFormat:@"delete from restaurants where id='%@'", number];
    [database executeUpdate:query];
}

我做错了什么?或者我该如何解决/预防这一问题?

罗布·马约尔是对的。你需要[接近]。看起来是这样的:

FMResultSet *rs = [database executeQuery:[NSString stringWithFormat:@"SELECT * FROM restaurants WHERE id='%@'", number]];
if ([rs next]) {
    NSString *cloudKit = [rs stringForColumn:@"CloudKit"];

    NSLog(@"CloudKit is %@", cloudKit);

    CKRecordID *recordID = [[CKRecordID alloc] initWithRecordName:cloudKit];

    NSLog(@"recordID is %@", recordID);

    [[CKContainer defaultContainer].privateCloudDatabase deleteRecordWithID:recordID completionHandler:^(CKRecordID *recordID, NSError *error) {
        NSLog(@"%@", error);
    }];
}
[rs close];

user4992124我将为您提供删除数据的示例代码。请自定义有关您的编码的代码

- (IBAction)actionDelete:(id)sender
{
   NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
   NSString *docDir = [dirPaths objectAtIndex:0];
   NSString *databasePath = [docDir stringByAppendingPathComponent:@"yourDBName.sqlite"];

  FMDatabase *database = [FMDatabase databaseWithPath:databasePath];

  [database open];

  [database executeUpdate:@"delete from phone where id = ?",number];

  UIAlertView *alert =[[UIAlertView alloc]initWithTitle:@"Sample SQLite" message:@"Deleted Successfully" delegate:Nil cancelButtonTitle:@"OK"otherButtonTitles: nil];
  [alert show];

  [database close];

} 

在执行delete语句之前,请尝试
[rs close]