So, I created an app that stores some data. However, every time, after I've called the delete function I wrote, and then call a different function, I get an error saying database locked
.
This is the function:
+ (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];
}
What am I doing wrong? Or how can I solve/prevent this?
rob mayor is right. You need [rs close]. Would look like this:
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];