CoreDataエンティティ「MyGalleryPhoto」をクエリするNSFetchedResultsControllerがあります。
いくつかのオブジェクトを削除しようとしていますが、いくつかの問題が発生しています。MagicalRecordを使用しています。これが私の最初のコードの試みであり、私の見解ではうまくいくはずです。コードが実行された時点で、オブジェクトはfetchedResultsControllerに表示されるため、確実に存在します。
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
for (MyGalleryPhoto *myGalleryPhoto in [self.fetchedResultsController.fetchedObjects objectsAtIndexes: self.selectedIndexes]) {
NSError *error = nil;
MyGalleryPhoto *localMyGalleryPhoto = (MyGalleryPhoto *) [localContext existingObjectWithID: myGalleryPhoto.objectID error: &error];
NSLog(@"error: %@:%@", [error localizedDescription], [error userInfo]);
NSLog(@"mygp: %@", [localMyGalleryPhoto description]);
[localMyGalleryPhoto deleteInContext: localContext];
}
} completion:^(void){
}];
このコードは機能しません。myGalleryPhotoエントリが見つからず、返されるエラーは次のとおりです。「操作を完了できませんでした。(Cocoaエラー133000)」また、existingObjectWithId:error:を呼び出すMR_inContextを使用してみました。
多くのことをいじった後、私はこの下品なフランケンシュタインの怪物を思いついた。それはエンティティからすべてのレコードを取り出し、ObjectIDの文字列表現を比較する。これは正常に機能します。なんで?今日GitHubからダウンロードしたMagicalRecordのコピー、最新のXCode、最新のSDKなどを使用しています。
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
NSArray *allMyGalleryPhotos = [MyGalleryPhoto findAllInContext: localContext];
for (MyGalleryPhoto *myGalleryPhoto in [self.fetchedResultsController.fetchedObjects objectsAtIndexes: self.selectedIndexes]) {
MyGalleryPhoto *myGalleryPhotoToDelete = nil;
for (MyGalleryPhoto *existingMyGalleryPhoto in allMyGalleryPhotos) {
NSString *existingURLString = [[existingMyGalleryPhoto.objectID URIRepresentation] absoluteString];
NSString *URLString = [[myGalleryPhoto.objectID URIRepresentation] absoluteString];
NSLog(@"ExistingURLString: %@", existingURLString);
NSLog(@"URLString: %@", URLString);
if ([URLString isEqualToString: existingURLString]) {
myGalleryPhotoToDelete = existingMyGalleryPhoto;
}
}
if (myGalleryPhotoToDelete) [myGalleryPhotoToDelete deleteInContext: localContext];
}
} completion:^(void){
}];