2012-03-05 7 views
1

원격 웹 서비스에서 데이터를 다운로드한다고 가정 해 보겠습니다. 더 정확하게는 웹 서비스에서 뉴스 목록을 다운로드하기 위해 각 뉴스에 newsID가 있습니다. 서비스의 기본 키로 간주하여 두 개의 동등한 newsID를 찾을 수 없습니다.핵심 데이터 속성 고유성

이미 존재하지 않는 뉴스 ID가있는 데이터 만 삽입 할 수 있습니까?

나는이 방법으로 내 솔루션 초안을 작성했습니다 :

- (BOOL)validateNewsID:(NSNumber **)newsID error:(NSError **)error 
{ 
    NSError *countError = nil; 
    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease]; 
    [fetchRequest setEntity:[self entity]]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"newsID == %@", *newsID]; 
    [fetchRequest setPredicate:predicate]; 


    NSUInteger resultCount = [SharedManagedObjectContext countForFetchRequest:fetchRequest error:&countError]; 
    if (countError) { 
     OLog(countError); 
     *error = countError; 
     return NO; 
    } 

    if (resultCount > 0) { 
     NSString *errorString  = @"NewsID should be unique"; 
     NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:errorString 
                    forKey:NSLocalizedDescriptionKey]; 
     NSError *uniquenessError = [[[NSError alloc] initWithDomain:kNewsValidationDomain 
                    code:kNewsValidationUniquenessCode 
                   userInfo:userInfoDict] autorelease]; 
     *error = uniquenessError; 
     return NO; 
    } 

    return YES; 
} 

하지만를 내 생각 때문에 나는 내 같은 객체가 이전과 관련하여 삽입 찾을 페치 요청을 수행 할 때, 예상대로되지 작업을 수행합니다. 내가 잘못?

어떻게 해결할 수 있습니까?

+0

왜 포인터에 대한 포인터를 newsID로 보내시겠습니까? –

+0

매개 변수가 선언되었으므로 (NSNumber **) newsID –

답변

0

유효성을 검사하려는 것과 동일한 객체를 찾은 것처럼 보입니다.

  1. 다른 항목을 확인하기 전에 페치 요청을 실행하고 결과 배열에서 현재 개체를 제거하십시오.
  2. 가능한 경우 현재 개체를 제외하도록 조건자를 조정합니다.
  3. resultCount > 0에서 resultCount > 1으로 변경하십시오.
관련 문제