나는 흥미로운 수수께끼를 보았습니다 (당연히, 나는 끔찍한 잘못을 저지르고있을 수도 있습니다).NSTokenFieldCell 핵심 데이터 다차원 관계 사용을 강제하는 서브 클래스
NSTokenField가 핵심 데이터 응용 프로그램에서 관계를 "표현"하고 싶습니다. 전제는 다음과 같습니다 : Notes 배열 컨트롤러에서로드 된 TableView에서 Note를 클릭합니다. 토큰 필드는 Notes 어레이 컨트롤러 선택 항목에 바운드됩니다 ("값"을 통해). 태그는 엔티티 Notes에서 일대 다 관계입니다.
분명히 NSTokenField는 어레이 컨트롤러가 제공하는 NSSet을 허용하지 않습니다. 이 문제를 해결하기 위해 NSTokenFieldCell을 서브 클래 싱하여 objectValue
및 setObjectValue:
메소드를 오버라이드했습니다. NSTokenFieldCell이 예상 한 NSArray에 제공된 NSSet을 단순히 변환 할 수 있다고 생각했습니다. (참고 :. 내가 원래 NSTokenField 서브 클래스에서이 메소드를 오버라이드 (override) 시도하지만, 그들이 호출되는되지 않은) :
- (void)setObjectValue:(NSSet*)object {
tagsList = [object copy];
NSMutableArray *displayList = [[NSMutableArray alloc] init];
for (id newObject in tagsList) {
[displayList addObject:[newObject valueForKey:@"Name"]];
}
[super setObjectValue:displayList];
}
- (id)objectValue {
NSArray *displayList = [super objectValue];
NSEntityDescription *tagEntity = [NSEntityDescription
entityForName:@"Tag"
inManagedObjectContext:[appDelegate
managedObjectContext]];
NSMutableSet *returnValue = [[NSMutableSet alloc] init];
for (NSString *token in displayList) {
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:tagEntity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"Name == %@", token];
[request setPredicate:predicate];
NSError *error;
NSArray *results = [[appDelegate managedObjectContext] executeFetchRequest:request error:&error];
if (results == nil) {
NSManagedObject *object = [NSEntityDescription insertNewObjectForEntityForName:@"Tag" inManagedObjectContext:[appDelegate managedObjectContext]];
[object setValue:token forKey:@"Name"];
[returnValue addObject:object];
} else {
[returnValue addObject:[results objectAtIndex:0]];
}
}
return returnValue;
}
그것은 충돌
그래서 생각 해낸 코드가 말했다. :(그리고, 놀랍게도 그것은 [super objectValue]
를 호출하는 라인에 충돌 그것은 나에게 오류 제공합니다..
-[NSConcreteAttributedString countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance ...
한숨을 슬픈 일입니다 내가 코어 데이터 XML 파일로 가서 참고 a를 줄 때 태그가 올바르게 표시되고 [super setObjectValue:]
이 문자열 배열을 전달하지만 다른 곳으로 마우스를 가져 가면 오류가 발생합니다.
나는 이것에 대해 어떻게해야할지 모르겠다. 끔찍한 일이라도 되니? 고마워.
업데이트 : 차이가 나는 경우 TokenField에 대해 구성된 대리인이 없습니다.
코드 샘플을 게시 할 수 있습니까? NSTextField가 CoreData와 작동하도록 강제하는 것은 흥미로운 주제입니다 ... – Gobra