Для упрощения у меня есть таблица URL и данные их закладок.
Вот как я создаю таблицу, вставляю записи, получаю закладки из URL и URL из закладки:
- (void)createTableForDatabase:(FMDatabase*)db {
NSString* createTableSQL = @"CREATE BookmarkURLs (url TEXT, bookmark BLOB)";
[db executeUpdate:createTableSQL];
}
- (void)insertNewRecordWithURL:(NSURL*)url forDatabase:(FMDatabase*)db {
NSData* bookmarkData = [self bookmarkForURL:url];
NSString* insertSQL = @"INSERT INTO BookmarkURLs (url, bookmark) VALUES(?,?)";
[db executeUpdate:insertSQL withArgumentsInArray:@[url.absoluteString, bookmark]];
}
- (NSData*)bookmarkForURL:(NSURL*)url {
return [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope | NSURLBookmarkResolutionWithoutUI
includingResourceValuesForKeys:nil
relativeToURL:nil
error:nil];
}
- (NSURL*)urlForBookmark:(NSData*)bookmark {
BOOL bookmarkIsStale = NO;
NSError* theError = nil;
NSURL* bookmarkURL = [NSURL URLByResolvingBookmarkData:bookmark
options:NSURLBookmarkResolutionWithoutUI
relativeToURL:nil
bookmarkDataIsStale:&bookmarkIsStale
error:&theError];
if (bookmarkIsStale || (theError != nil)) {
// Handle any errors
return nil;
}
return bookmarkURL;
}
Теперь время от времени я хочу обойти все записи, разрешить закладки и проверить, были ли файлы переименованы / перемещены, и обновить URL-адреса.Одна из причин, по которой это нужно сделать, - запросить все закладки, затем для каждой закладки разрешить ее URL-адрес и обновить его запись.Я думаю, что это не лучшее решение с точки зрения производительности.Есть ли способ сделать это с одним выполнением SQL и как?