//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被指定为unsigned int,所以我甚至不能为它赋值-1,如果我愿意,请稍后检查-1。
答案 0 :(得分:2)
在致电 error
之前将nil
设为executeFetchRequest::
。如果error
之后nil
不是count
,那么它就会被设置,从而发生错误。
nil
检查屏蔽nil
检查的原因是因为发送到nil
的任何消息都返回nil
,在这种情况下也是0.这很容易通过首先检查if
来修复,或修改您的if (fetchedObjects && [fetchedObjects count] == 0){
语句,使其如下所示:
countForFetchRequest::
对于发生错误时返回NSNotFound
{{1}}的情况,请检查一下。
答案 1 :(得分:2)
复制&粘贴自countForFetchRequest:error:
返回值
如果传递给executeFetchRequest,则返回给定获取请求的对象数:error:,如果发生错误,则返回NSNotFound。
所以,
if (numEntities == NSNotFound) {
// Handle the error
}