2011-02-23 4 views
0

내 프로젝트에서 CoreData를 사용하기 시작했습니다. CodeData의 코드 조각이 없으면 프로젝트가 제대로 작동했습니다. coreData 프로젝트 템플릿에서 NSManagedObjectContext에 액세스하기위한 메소드를 추가했습니다. 이제 다음 코드를 사용하여 새로운 CoreData 개체를 만들려고 :CoreData를 사용할 때 "[CFString release] : 메시지가 할당 해제 된 인스턴스로 전송되었습니다"

- (void)saveSearchResultToHistory:(NSArray *) productsArray { 
    [productsArray retain]; 

    NSLog(@"context: %@", self.managedObjectContext); 

    Product *product = [NSEntityDescription 
            insertNewObjectForEntityForName:@"Product" 
            inManagedObjectContext:self.managedObjectContext]; 
product.productId = [(Product *) [productsArray objectAtIndex:0] productId]; 

NSError *error; 
if (![self.managedObjectContext save:&error]) { 
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
} 


[productsArray release]; 
} 

이 방법은 내가 두 번째로 그것을 실행하려고하면, 처리가에 정지 한 후 모든 것이 잘되면 실행되는 경우 :

콘솔의 다음 오류 메시지
Product *product = [NSEntityDescription 
            insertNewObjectForEntityForName:@"Product" 
            inManagedObjectContext:self.managedObjectContext]; 

:

[CFString은 유지] 할당 해제 메시지 인스턴스에 전송 0x5a23b0

어떤 아이디어가 잘못되었을 수 있습니까? 감사합니다.

답변

0

먼저 뭔가를 추가 할 때마다 컨텍스트를 저장할 필요가 없습니다. 앱이 닫히거나 백그라운드로 들어가면 저장하면됩니다.

당신이 NSString을 풀어 놓은 것처럼 보이는 오류가 발생했습니다.

- (void)saveContext { 
    if ([self.managedObjectContext hasChanges]) { 
     NSError *error = nil; 
     if (![self.managedObjectContext save:&error]) { 

      dbgPrint(@"Failed to save to data store: %@", [error localizedDescription]); 

      NSArray* detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey]; 

      if (detailedErrors != nil && [detailedErrors count] > 0) { 
       for(NSError* detailedError in detailedErrors) { 
        dbgPrint(@"--DetailedError: %@", [detailedError userInfo]); 
       } 
      } else { 
       dbgPrint(@" %@", [error userInfo]); 
      } 
     } 
    } 
}  
+0

예, 마지막에 어디 한 번만 컨텍스트를 저장하는 것은 의미가 있습니다 : 오류이 저장 기능은 coredata 컨텍스트를 사용하지 않을 경우

확인합니다. 이것을 지적 해 주셔서 감사합니다! – Jakub

관련 문제