2012-01-20 3 views
0

nstableview에 바인딩 된 배열 컨트롤러가 있습니다. 또한 사용자가 채운 다음 "추가"버튼을 누르는 nstextfield가 있습니다. 나는 first_name과 last_name 필드를 가져 와서 엔티티를 채우고 싶다. 엔티티 PersonEntity를 호출합니다.프로그래밍 방식으로 엔티티를 만들고 배열 컨트롤러에 추가합니다.

추가 버튼의 위임자에서 2 개의 텍스트 필드에 대한 문자열 값을 가져 와서 엔티티를 채운 다음 배열 컨트롤러에 추가합니다. 나는 코코아/objective-c를 처음 사용합니다. 이것은 간단한 일처럼 보이지만 내가

PersonEntity* person 
[person setFirst_name:firstName]; 
[person setLast_name:lastName]; 
[customerArray addObject:person]; 

그것은 내가 [customerArray addObject : 고객]에서 전무를 추가 할 수 없다는 충돌이 예상처럼 엔티티를 생성 할 수있는 표시 줄을. 이 줄은 테이블 뷰에 바인딩 된 배열 컨트롤러에 엔티티를 추가하려는 나의 시도입니다. 이런 식으로하는 올바른 방법은 무엇입니까?

+0

컨텍스트에 대한 코드를 더 게시 할 수 있습니까? 어떤 유형의 객체가 고객입니까? 사람이 할당 된 적이 있습니까? – sbooth

+0

sbooth, 고객이 아니어야하는 코드가 수정되었습니다. 사람이 할당되지 않은 경우, 사람에게 alloc/init을 수행하면 충돌이 발생합니다. – JonF

+0

사람이 할당되지 않은 경우 문제 일 수 있습니다. 'PersonEntity * person = [[PersonEntity alloc] init]'이 충돌하면 또 다른 문제의 원인이있다. 'PersonEntity'의 수퍼 클래스는 무엇입니까? – sbooth

답변

3

PersonEntity가 핵심 데이터 엔터티인지 확실하지 않지만 질문에 핵심 데이터라는 태그가 붙어 있기 때문에 나는 추측 할 것입니다.

NSTableView에 바인딩 된 ArrayController (ArrayController)가 CoreData 소스에 바인딩 된 경우에는 직접 개체를 추가하지 마십시오. 대신 managedObjectContext에 추가하면 NSTableView에 반영됩니다.

코드는 다음과 같아야합니다

PersonEntity *person = [NSEntityDescription insertNewObjectForEntityForName:@"PersonEntity" 
             inManagedObjectContext: managedObjectContext]; 

[person setFirst_name:firstName]; 
[person setLast_name:lastName]; 

/* Save Event */ 
NSError * error = nil; 
[__managedObjectContext save: &error]; 

희망이 도움이! Mane

+0

완벽하니, 고마워. – JonF

관련 문제