2009-11-05 5 views
3

핵심 데이터의 기존 레코드를 편집하고 싶습니다. 순간, 나는이 코드를 가지고 있지만, 새 레코드를 생성합니다 (올바른 컬럼에 올바른 데이터를 삽입) :NSManagedObject setValue 문제 (핵심 데이터)

NSManagedObjectContext *context = [[NSApp delegate] managedObjectContext]; 
NSManagedObject *instrument = nil; 



instrument = [NSEntityDescription insertNewObjectForEntityForName: @"Instrument" 
        inManagedObjectContext: context]; 

[instrument setValue:[NSNumber numberWithInt:quantityInStockInstruments] 
    forKey: @"quantity"]; 

결과는 다음과 같이 표시됩니다

Instrument | Value | Quantity 

Violin  | £25 | 9 

      |  | 8 <<< This is the new record that is created, instead of setting the 
          quantity of violin from '9' to '8' 

내가 원하는 프로그램이이 경우에 '바이올린'행입니다 현재 강조 표시된 행의 수량 열을, (편집 나는이

+0

현재 강조 표시된 행을 업데이트하는 방법은 테이블에서 데이터를 가져 오는 방법에 따라 다릅니다. ArrayController/bindings 또는 데이터 소스를 사용하고 있습니까? – amrox

+0

엔티티 : instrument가있는 NSArrayController에 테이블을 바인딩하고 있습니다. 계측기 엔티티는 핵심 데이터 모델에 있습니다. btw, 나는 실제로이 NSArrayController에 해당하는 .h 및 .m 파일이 없습니다. – Michael

답변

4

refulgentis가 말했듯이 실마리는 실렉터의 이름입니다. 새로운 객체를 추가하고 있습니다.

테이블을 사용하는 대신 더 나은 방법은 NSArrayController의 selectedObjects을 사용하는 것입니다. (이 긴 명확성을 위해 호흡하고 난 내 머리 위로 떨어져를 작성했습니다) 예를 들어 :

이 가지고있는 코멘트 후 추가

// Get the selected objects from the NSArrayController. 
// There may be more than one object selected, so this needs to be accounted for. 
NSArray *selectedObjectsArray = [yourArrayController selectedObjects]; 

// Get the first object in the array, this is the one that will have it's values changed. 
id firstSelectedObject = [selectedObjectsArray objectAtIndex:0]; 

// Change a value in a KVC compliant way 
[firstSelectedObject setValue:newValue forKey:@"keyValueToChange"]; 

편집 당신은에 출구를 가지고 어레이 컨트롤러에 연결하고 Interface Builder에서 올바르게 연결 했습니까?

어쨌든, 코드는 나를 위해 작동합니다. 작동하는 모습을 보여주는 example project입니다.

+0

흠, 그걸 시도했지만 표의 수치가 업데이트되지 않습니다. 기본적으로 코드를 입력하고 프로그램에 맞게 변경 한 다음 표를 다시로드했습니다. – Michael

+1

나를 위해 일합니다. 다운로드 할 수있는 예제 프로젝트에 대한 링크를 추가하여 수행해야 할 작업을 확인했습니다. – Abizern

+0

샘플 코드가 너무 많아서 고맙습니다. 마침내 제가 잘못하고있는 것을 보게되었습니다! 도움 주셔서 감사합니다. – Michael

1

주 선택기 이름을 할 것입니다 방법 :.? ": inContext 새로운 개체를 삽입".

amrox는 귀하의 모델 (예 : Core Data)와 컨트롤러가 연결되어 있어야합니다. 특히 제가 바인딩 (바인딩을 가지고 있지 않습니다)의 아이폰쪽에 더 많이 있기 때문에 당신의 코드에 대해 더 많이 알지 않고 말하기는 어렵습니다.하지만 기본적으로 [[yourDataArray objectAtIndex : [table selectedRow ]] setValue : @ "무엇이든"forKey : @ "무엇이든"]