以下方法是免费的斯坦福iOS 7课程第13周的代码。我的问题与if else
子句中的代码有关。在第一部分中,它表示if(!matches ...)
,我假设这意味着从获取请求中没有返回任何内容。但是,当教师谈到控制语句的第三部分时,else
,他说,如果在请求中找不到对象,我们就会创建该对象,并因此创建该代码的对象
photo = [NSEntityDescription insertNewObjectForEntityForName:@"Photo" inManagedObjectContext:context];
但是,如果由于找不到对象而创建了对象,那么第一部分中不会if(!matches...
也意味着找不到匹配项。如果没有,if(!matches
处理什么情况?
+(Photo *)photoWithFlickrInfo:(NSDictionary *)photoDictionary
inManagedObjectContext:(NSManagedObjectContext *)context
{
Photo *photo = nil;
NSString *unique = photoDictionary[FLICKR_PHOTO_ID];
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Photo"];
request.predicate = [NSPredicate predicateWithFormat:@"unique = ", unique];
NSError *error;
NSArray *matches = [context executeFetchRequest:request error:&error];
if (!matches || error || ([matches count] > 1) ){
//handle error
}else if([matches count]){
photo = [matches firstObject];
}else{
photo = [NSEntityDescription insertNewObjectForEntityForName:@"Photo" inManagedObjectContext:context];
}
return photo;
}
答案 0 :(得分:1)
他做了一些偷偷摸摸的事......
当满足三个条件中的一个或多个时,第一个条件为真:
!matches
检查[context executeFetchRequest:request error:&error]
是否返回nil。error
检查错误是否已设置(不是nil)。[matches count] > 1
检查返回的数组是否有多个条目。第二个条件检查数组的计数。这确实应该是else if (matches.count == 1
,因为如果计数大于1,那么它将被第一个条件捕获。如果计数为零,那么这将不执行,因为if (0)
被评估为if (NO)
。
如果[context executeFetchRequest:request error:&error]
返回一个空的但不是nil的数组,则只会运行else。
答案 1 :(得分:0)
如果请求和所有请求都有效,则没有与请求匹配的项,则executeFetchRequest将不返回任何错误和空数组。因此,matches != nil
和[matches count] != 0