2012-09-06 3 views
3

저는 Core Data를 처음 사용합니다. 중복 값을 업데이트하고 싶습니다. 예를 들어 내 표는 다음과 같습니다.coredata에서 중복 값을 프로그래밍 방식으로 업데이트 하시겠습니까?

id | Name 
============ 
1 | Joseph 
2 | Fernandez 
3 | Joseph 
4 | James 

id 1 및 4에 해당하는 조셉을 "myName"으로 업데이트하려고한다고 가정합니다. 이 업데이트를 시도하면 4 행만 업데이트됩니다. 어떤 문서에서도이 작업을 수행 할 수있는 방법을 찾을 수 없습니다. 누구든지 해결책을 제안 할 수 있습니까?

질문이 하나 더 있습니다. 어떻게 모든 이름 값을 인쇄 할 수 있습니까?

+0

를 코드는 어디 업데이트하는 방법을 알고 문서를 통해 읽을 것인가? – holex

답변

0

NSManagedObject을 검색하고 Name 속성을 변경하는 것만 큼 간단합니다. 가져 오기 요청으로 NSManagedObject을 검색 할 수 있습니다. 속성을 변경하고 응용 프로그램을 닫을 때에도 속성을 변경하지 않으려면 managedObjectContext에서 save을 수행해야합니다.

당신은 핵심 데이터에 속도까지 얻을 수있는 문서를 읽어해야합니다 : http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/CoreData/Articles/cdBasics.html#//apple_ref/doc/uid/TP40001650-TP1

편집 : 단지 NSLog 당신이 알고 싶은대로, 예를 들어 당신이 요청의 결과를 가져 로그인합니다.

1

제임스

샘플 코드를 사용하여 두 가지 질문에 모두 답변 해 드리겠습니다.

특정 오브젝트를 업데이트하려면 술어와 함께 NSFetchRequest을 새로 작성하고 오브젝트 (NSManagedObject)를 잡고 원하는 값을 갱신하고 컨텍스트를 저장하십시오.

따라서, 예를 들어 :

NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"YourEntityName"]; 
// set the predicate (it's equal to set a WHERE SQL clause) filtering on the name for example 
// use camel case notation if possible, so instead of Name use name (for this you have to changes your model, if you don't want to do it use Name) 
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"name == %@", @"Joseph"]]; 

NSError* error = nil; 
NSArray* results = [context executeFetchRequest:fetchRequest error:&error]; 
// do some error checking here... 
for (NSManagedObject resultItem in results) { 

    // use KVC (for example) to access your object properties 
    [resultItem setValue:@"myName" forKey:@"name"]; 
} 

// save your context here 
// if you don't save, changes are not stored 

인쇄하려면 당신은 (유형 NSManagedObject의) 개체를 잡아 NSLog를 사용, 자체까지 새로운 NSFetchRequest을해야합니다. 그래서 예를 들면

:

NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"YourEntityName"]; 

NSError* error = nil; 
NSArray* results = [context executeFetchRequest:fetchRequest error:&error]; 
// do some error checking here... 
for (NSManagedObject resultItem in results) { 

    NSLog(@"%@", [resultItem valueForKey:@"name"]); 
} 

P.S. 필자가 제공 한 코드는 매우 간단하며 특정 값에 사용 된 술어는 name과 대조됩니다. 이 오류가 발생할 수 있으므로, 모델을 수정하고 각 개체에 대한 guid 일종의 사용 (id는 그 것이지만 다른 이름으로 바꿀 것입니다. 예를 들어 userId) . 완료되면이를 확인할 수 있습니다.

희망이 있습니다.

+0

고맙습니다. – James

관련 문제