3

これが ManagedObjects を返さない理由を誰でも見つけることができますか? ATNSManagedObject+EasyFetching クラスに以下を追加しようとしていますが、フェッチ結果は何も返しません。これらを EasyFetch クラスの外でフェッチすると、100 個以上のオブジェクトがあるため、CoreData が空ではないことがわかります。

+ (void)deleteAllObjectsInContext;
{
    NSManagedObjectContext *context = [NSManagedObjectContext defaultContext];
    NSEntityDescription *entity = [self entityDescriptionInContext:context];
    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
    [request setEntity:entity];
    //[request setIncludesPropertyValues:NO];

    NSError *error = nil;
    NSArray *results = [context executeFetchRequest:request error:&error];
    if (error != nil)
    {
        //handle errors
        NSLog(@"delete error");
    }

    for (NSManagedObject *thing in results) {  <--- |results shows 0 objects|
        [context deleteObject:thing];
    }

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

3 に答える 3

2

次のように単純化してみてください。

// first get the context or pass it in as an argument (this is usually what I do for
// a deleteAll class level method like this but your call

+ (void)deleteAllObjectsInContext:(NSManagedObjectContext*)context {

    NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@ "<yourEntity>"];
    // no predicate
    // no sortDescriptors

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

    if (!results || error) { // nil is an error
        // handle error
    }

    // do something with results

}

このようにして、NSEntityDescriptionオブジェクトを取得する必要をなくすことができます。

アップデート:

このパッセージを追加したかっただけです:

戻り値

"レシーバーおよびレシーバーの永続ストアコーディネーターに関連付けられた永続ストアからフェッチされた要求によって指定された基準を満たすオブジェクトの配列。エラーが発生した場合はnilを返します。要求によって指定された基準に一致するオブジェクトがない場合は、空を返します。配列"。

于 2012-06-15T15:59:39.900 に答える
1

1つの可能性は、あなたNSManagedObjectContext *contextが実際にであるということnilです。Objective-Cでは、メッセージをnilに送信することは完全に受け入れられ、問題がどこにあるかを検出するのが難しくなる可能性があります。

のドキュメントが見つからない[NSManagedObjectContext defaultContext]ので、それはあなたが書いた(または使用している)カテゴリだと思います。そして、それが常に有効なコンテキストを返すとは限らないのではないかと思います。いくつかのログを追加して見てください!

于 2012-06-15T16:12:09.370 に答える