2014-06-11 3 views
1

이 질문에 대한 제 대답을 드리겠습니다. 나는 가능한 한 많은 다른 답변을 볼 때까지 그것을 받아들이지 않을 것입니다. 내가 최고 도우미 방법은 많은 다운로드하는 동안 관계를 설정할 수 있도록하기위한 것입니다 아래의 코드NSFetchRequest는 때로는 결과 만 반환합니다.

- (id)fetchUniqueEntity:(Class)entityClass 
       withValue:(id)value 
      fromContext:(NSManagedObjectContext *)context 
      insertIfNil:(BOOL)insertIfNil { 
    if(!value) { 
     return nil; 
    } 

    NSString *entityUniqueIdentifierKey = [entityClass performSelector:@selector(uniqueIdentifierKey)]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", entityUniqueIdentifierKey, value]; 

    NSArray *entities = [self fetchEntities:entityClass 
           withPredicate:predicate 
           fromContext:context]; 

    if(!entities || [entities count] == 0) { 
     if (insertIfNil) { 
      return [entityClass performSelector:@selector(insertInManagedObjectContext:) 
            withObject:context]; 
     } 
    } else { 
     return [entities objectAtIndex:0]; 
    } 

    return nil; 
} 

- (NSArray *)fetchEntities:(Class)entityClass 
      withPredicate:(NSPredicate *)predicate 
       fromContext:(NSManagedObjectContext *)context { 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    NSString *entityName = [entityClass performSelector:@selector(entityName)]; 
    [request setEntity:[NSEntityDescription entityForName:entityName 
            inManagedObjectContext:context]]; 
    if(predicate) { 
     [request setPredicate:predicate]; 
    } 

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

    if(error) { 
     NSLog(@"Error executing fetch request for %@! \n\n%@", entityName, error); 
    } 

    return entities; 
} 

로 어려움을 겪고 있었어요 일 지난 몇

. 내가 가지고있는 문제는 비록 Account 객체가 accountId1 인 영구 저장소 (확인 됨)에 있다고해도 그 객체를 절반 만 검색한다는 것입니다. 나는 정직하게 이유를 설명 할 수 없다. 어떤 아이디어?

답변

1

많은 디버깅과 시행 착오 후, 나는

[NSPredicate predicateWithFormat:@"%K == %d", entityUniqueIdentifierKey, [value intValue]]; 

[NSPredicate predicateWithFormat:@"%K == %@", entityUniqueIdentifierKey, value]; 

에서 술어 형식을 변경하면 문제를 해결할 것을 발견했습니다. Apple 설명서를 읽은 후 %@이 작동해야합니다. 그래서 나는 이것이 왜 문제를 해결했는지 100 % 확신하지 못했습니다.

관련 문제