2

エンティティのすべての管理対象オブジェクトを削除するために、NSFetchRequest の述語を省略したいと考えています。

ただし、述語がない場合(SQLデバッガによる)、fetchリクエストは実行されません。Apple によると、述語はオプションである必要があります。

述語を削除するには、コードをどのように変更する必要がありますか? 何か案は?ありがとうございました!

- (void)deleteEntity:(NSString*)entityName inContext:(NSManagedObjectContext *)context
    {  
        NSFetchRequest * request= [[NSFetchRequest alloc] init];
        [request setEntity:[NSEntityDescription entityForName:@"TableStructure" inManagedObjectContext:context]];
        //[entities setIncludesPropertyValues:NO]; //only fetch the managedObjectID
        NSPredicate * predicate = [NSPredicate predicateWithFormat:@"category = 'est'"];
        [request setPredicate:predicate];

    NSError *error = nil;
    NSArray *entitiesArray = [context executeFetchRequest:request error:&error];

    if (error) {
        NSLog(@"%@: Error fetching context: %@", [self class], [error localizedDescription]);
        NSLog(@"entitiesArray: %@",entitiesArray);
        return;
    }

    for(NSManagedObject *entity in entitiesArray) {
        [context deleteObject:entity];
    }

    NSError *saveError = nil;
    [context save:&saveError];
}

更新 2

データベースの準備が整う前に、フェッチ要求を呼び出しているようです。コア データ データベースの準備が整う前にリクエストが呼び出されないようにするにはどうすればよいですか?

4

2 に答える 2

2

述語が必要ない場合は、単に述語を割り当てないでください。次の行を削除します。

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"category = 'est'"];
[request setPredicate:predicate];
于 2012-04-24T09:49:46.007 に答える
0

Core Data データベースの準備が整う前にフェッチ リクエストを発行しました。

この問題を解決するためにImportFormulasInRequest、コア データ データベースをカプセル化する UIDocument openWithCompletion ハンドラーへの呼び出しを追加しました。

- (void)useDocument
{
    if (![[NSFileManager defaultManager] fileExistsAtPath:[self.myDatabase.fileURL path]]) {
        // does not exist on disk, so create it
        [self.myDatabase saveToURL:self.myDatabase.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
            [self setupFetchedResultsController];
        }];
    } else if (self.myDatabase.documentState == UIDocumentStateClosed) {
        // exists on disk, but we need to open it
        [self.myDatabase openWithCompletionHandler:^(BOOL success) {
            [self setupFetchedResultsController];
            [self ImportFormulasInContext:[self.myDatabase managedObjectContext]];
        }];
    } else if (self.myDatabase.documentState == UIDocumentStateNormal) {
        // already open and ready to use
        [self setupFetchedResultsController];
        [self ImportFormulasInContext:[self.myDatabase managedObjectContext]];
    }
}
于 2012-04-24T11:21:26.280 に答える