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,因此可以安全地测试数组是否为空方式,但它掩盖了我对空数组的检查。因此,问题是我没有确定的方法来检查是否发生错误。关于我应该如何去做这件事的任何想法?

提前致谢!

编辑:

在这种情况下,我将如何检查错误?

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

由于 NSUInteger 被指定为无符号整数,所以我什至不能给它赋值 -1 并在以后检查 -1 如果我愿意。

4

2 回答 2

2

调用前设置error为。如果不是之后,则设置它,因此发生错误。nilexecuteFetchRequest::errornil

count检查掩盖检查的原因nil是因为发送给nil返回的任何消息nil在这种情况下也是 0。这可以通过nil首先检查来轻松解决,或者修改您的if语句,如下所示:

if (fetchedObjects && [fetchedObjects count] == 0){

对于countForFetchRequest:: NSNotFound发生错误时返回的情况,因此只需检查即可。

于 2011-03-25T05:04:24.857 回答
2

从文档中复制并粘贴countForFetchRequest:error:

返回值

如果给定的获取请求已被传递给 executeFetchRequest:error: 或 NSNotFound 如果发生错误,则该请求将返回的对象数。

所以,

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