2011-08-24 4 views
0

자신이 객관적인 C 및 iOS SDK를 가르치는 과정에서. 나는 내가 아직하고있는 일을 이해하고 있다고 생각하는 지점에 도달했습니다. 나는 과거의 길을 보지 못하는로드 블록을 때리고 있습니다. 하나의 마스터 엔티티가 몇 개의 다른 엔티티와 몇 개의 관계를 갖는 여러 엔티티가있는 핵심 데이터 모델을 만들었습니다. 그리고 주 엔터티와 일대일 관계에있는 모든 개체뿐만 아니라 주요 엔터티로 잘 작업 할 수 있습니다. 실행할 때관리되는 개체 메서드 오류 "인스턴스로 보내지는 인식 할 수없는 선택기"

Weapon *tempWeapon = [NSEntityDescription insertNewObjectForEntityForName:@"Weapon" inManagedObjectContext:inputContext]; 
NSArray *tempWeaponStats = [inputMech getMechWeaponStats:tempEquipName]; 

tempWeapon.weaponName = tempEquipName; 
tempWeapon.weaponDisplayName = tempEquipDisplayName; 
tempWeapon.weaponLocation = tempEquipLocation; 
tempWeapon.weaponType = tempEquipType; 
tempWeapon.weaponCritSize = tempEquipSize;    
tempWeapon.weaponHeat = [[NSNumber alloc] initWithInt:[[tempWeaponStats objectAtIndex:0] intValue]]; 
tempWeapon.weaponDamage = [[NSNumber alloc] initWithInt:[[tempWeaponStats objectAtIndex:1] intValue]]; 
tempWeapon.weaponRangeMin = [[NSNumber alloc] initWithInt:[[tempWeaponStats objectAtIndex:2] intValue]]; 
tempWeapon.weaponRangeShort = [[NSNumber alloc] initWithInt:[[tempWeaponStats objectAtIndex:3] intValue]]; 
tempWeapon.weaponRangeMed = [[NSNumber alloc] initWithInt:[[tempWeaponStats objectAtIndex:4] intValue]]; 
tempWeapon.weaponRangeLong = [[NSNumber alloc] initWithInt:[[tempWeaponStats objectAtIndex:5] intValue]]; 

NSLog(@"Adding to the weapon list %@", tempWeapon.weaponName); 
[inputMech insertObject:tempWeapon inWeaponListAtIndex:(NSUInteger)0]; 

: 나는 접근 생성 된 코어 데이터를 사용하여 NS 세트를 기반으로 기관 중 하나에 엔티티를 추가 할 때, 나는 알 수없는 선택 오류가 점점 오전 : 여기에 몇 가지 코드가 더 많은 일을 혼동이다 이 코드는 다음과 같은 오류가 발생합니다 :

2011-08-24 01:49:52.643 DigitalRecordSheet[12947:f203] -[Mech insertObject:inWeaponListAtIndex:]: unrecognized selector sent to instance 0x718bbe0 

이제 inputMech는 앞서 언급 한 마스터 엔터티 유형입니다. Mech.h의 핵심 데이터 생성기는 다음과 같습니다.

(void)insertObject:(Equipment *)value inEquipmentListAtIndex:(NSUInteger)idx; 

메시지를 제대로 보내고 있지만 작동하지 않습니다. 기본적으로 여러 개의 무기 목록이있는 Mech를 하나 갖고 싶습니다. 자, 내가이 일을 어떻게 잘못하고 있니? 나는 먼저 새로운 무기 오브젝트를 생성하고 원하는대로 설정 한 다음 Mech의 weaponList NSSet 오브젝트에 추가해야한다고 가정합니다. 하지만 핵심 데이터 선택기가 작동하지 않아서 내가 뭔가 잘못하고 있다고 가정해야합니다. 여기에있는 조언은 여러 책과 가이드를 통해 파헤 치고 이들 중 누구도 이러한 유형의 관계를 처리하는 프로세스에 대해 깊이 들어 가지 않습니다. 사전에 감사의 말을 전하십시오. 건배,

j^2

+0

를 다시 만들어, 나는 정말 주문할 수있는 기관이 필요하지 않았다 결정, 그래서 체크되지 않은 이 플래그는 생성 된 접근자를 변경합니다.이제 나는 - (void) addWeaponListObject : (Weapon *) value; 하지만 그걸 사용하려고하면 오류가 발생합니다. 'NSInvalidArgumentException'이유 : '*** - [NSSet intersectsSet :] : 인수가 NSSet이 아닙니다.'결코 낯설지 않은 예외로 인해 앱이 종료됩니다. 전에 본. 나는 지금 잠자리에 들고이 벽돌 벽에 머리를 세우지 않을거야. 나는 애플 리케이션을 얻는 것에 너무 가깝다. 실제로 붙박이로 몹시 화가났다. –

답변

1

이 오류는 데이터 모델의 구성으로 인한 것이 아닙니다.

unrecognized selector sent to instance 

... 오류는 항상 어떤 이유로 변수에 잘못된 클래스가있는 결과입니다. 이 경우

inputMech 변수의 클래스 Mech는없는 :

insertObject:inEquipmentListAtIndex: 

... 방법.

오류의 가장 큰 원인은이 모든 것을 작성하는 과정에서 Mech 클래스 파일의 사본이 여러 개 만들어 졌기 때문입니다. 하나는 순서화 된 관계로 구성되고 다른 하나는 그렇지 않습니다. 당신은 실제로 컴파일하지 않습니다.

두 번째 문제는 단순히 개체를 Weapon 개체가 필요한 메서드 매개 변수로 보내는 것입니다. addWeaponListObjectaddWeaponListObjects:

+0

그리고 이해력이 꽃 핀다! 감사합니다! –

+0

정말요? 내 코드에 문제가 없는데 앱이 계속 충돌합니다. 보십시오 [여기에 게시] (http://stackoverflow.com/questions/7385439/problems-with-nsorderedset) – JakubKnejzlik

0

다음 단계를 따르십시오. 1) Xcode를 통해 핵심 데이터 모델의 새 버전을 생성했습니다. 2)의 관계를 (수정이 사이에 새로운 관계를 추가 두 가지. enter link description here) 3) 추가 검토시 NSManagedObject 하위 클래스

관련 문제