1

やあみんな、私はこの機能を持っています:

//retrieves checksum within core data store, returns 0 if a checksum has not been stored
-(double)getStoredChecksum {
    NSError *error;
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription 
                                   entityForName:@"DataFeedManager" inManagedObjectContext:[self managedObjectContext]];
    [fetchRequest setEntity:entity];
    NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
    //+for (NSManagedObject* item in fetchedObjects) //REMOVE
        //+[[self managedObjectContext] deleteObject:item]; //REMOVE FOR CLEARING CHECKSUM CONTENTS

    if ([fetchedObjects count] == 0){ //array is empty
        NSLog(@"FETCHED OBJECTS IS EMPTY");
        checksumStored = NO;
        return 0;
    }
    if (fetchedObjects == nil) {
        NSLog(@"Error while fetching\n%@",
              ([error localizedDescription] != nil) ? [error localizedDescription] : @"Unknown Error");
    }
    if ([fetchedObjects count] > 1)
        NSLog(@"====BAD:Multiple Checksums Retrieved!!!!====");
    checksumStored = YES;
    double returnable = [[[fetchedObjects objectAtIndex:0] valueForKey:@"lastUpdateCheckSum"] doubleValue];
    return returnable;
}//getStoredChecksum()

ご覧のとおり、フェッチリクエストを実行しますが、エラーが発生したかどうかを確認する方法がわかりません。ご覧のとおり、を介して配列が空かどう[fetchedObjects count] == 0かを確認していますが、エラーが発生して配列がnilの場合、カウントにも0が返されるため、配列の空性をテストしても安全であるとどこかで聞きました。方法ですが、null配列のチェックをマスクします。したがって、問題は、エラーが発生したかどうかを確認する明確な方法がないことです。これをどのように行うべきかについて何か考えはありますか?

前もって感謝します!

編集:

この場合、どのようにエラーをチェックしますか?

NSUInteger numEntities = [[self managedObjectContext] countForFetchRequest:fetchRequest error:&error];

NSUIntegerはunsignedintとして指定されているため、必要に応じて、値-1を割り当てて、後で-1を確認することもできません。

4

2 に答える 2

2

のドキュメントからコピーして貼り付けますcountForFetchRequest:error:

戻り値

特定のフェッチ要求がexecuteFetchRequest:error:に渡された場合はオブジェクトの数、エラーが発生した場合はNSNotFoundが返されます。

それで、

if (numEntities == NSNotFound) {
    // Handle the error
}
于 2011-04-04T21:58:34.583 に答える