약 3 일 동안 작동하도록이 작업을 시도해 왔으며 그 주위에 마음을 갖게되었습니다. 누군가 조언 할 수 있습니까? 나는 기초를 만들었고 그것들은 모두 훌륭하게 작동하지만 여분의 비트를하려고 할 때 나는 그 주위에서 머리를 얻을 수 없다. plist에서 기술 용어 표를 작성하려고합니다. 이것은 알파벳순으로 인덱싱 된 섹션 테이블입니다. 잘 작동하지만 새로운 viewcontroller에서 각 용어의 정의에 대한 다음 단계를 추가하려고 할 때 코드 또는 plist 구조를 올바르게 가져올 수 없습니다. 현재 나는 두 개의 plists를 만들었습니다. 26 개의 알파벳 배열 사전 중 하나는 일련의 기술 용어입니다. 이 모든 것이 훌륭하게 작동합니다. 그런 다음 각 단어/정의 쌍에 하나씩 미리 정의 된 또 다른 사전을 작성했습니다. 보기 컨트롤러에서 @ "단어"키를 detailviewcontroller로 전달하여 @ "정의"를 가져올 것으로 예상됩니다. 이것이 옳은지 또는 잘못되었는지 (?) 알지 못합니다. 내 코드는 기술 용어 테이블을 훌륭하게 보여 주지만 행을 선택하면 충돌합니다. detailview 컨트롤러의 참조를 전달하는 코드와 관련이 있으므로 detailview에서 정의를 가져올 수 있습니다. 그러나이를 해결하는 방법을 알지 못합니다. 나는 도움을보기 위해 누군가를 위해 나의 코드의 일부를 여기에 게시했다. 어떤 아이디어? 여기iPhone SDK NSDictionary 및 NSArray 혼동
NSString *wordPath = [[NSBundle mainBundle] pathForResource:@"newsortedglossary" ofType:@"plist"];
NSDictionary *wordDict = [[NSDictionary alloc] initWithContentsOfFile:wordPath];
self.words = wordDict;
[words release];
NSArray *wordArray = [[words allKeys] sortedArrayUsingSelector:@selector(compare:)];
self.wordKeys = wordArray;
NSString *definitionPath = [[NSBundle mainBundle] pathForResource:@"newnewdefinitionglossary" ofType:@"plist"];
NSDictionary *definitionDict = [[NSDictionary alloc] initWithContentsOfFile:definitionPath];
self.definitions = definitionDict;
[definitions release];
didSelectRow ......... 여기
GlossaryDetailViewController *glossaryDetailViewController = [[GlossaryDetailViewController alloc]
initWithNibName:@"GlossaryDetailView" bundle:nil];
NSLog(@"did select-2"); // CRASHES HERE with NSDictionary may not respond to objectAtIndex
glossaryDetailViewController.definition = [self.words objectAtIndex:indexPath.row];
NSLog(@"did select-3");
[self.navigationController pushViewController:glossaryDetailViewController animated:YES];
NSLog(@"did select-4");
[glossaryDetailViewController release];
detailViewController은 .......
- (void)viewDidAppear:(BOOL)animated {
NSLog(@"didappear");
self.glossaryWordDefinition.text = [definition objectForKey:@"definition"];
고마워요. 네 말이 맞을거야. 나는 그것을 변경했고 코드는 이제 detailcontroller를 통해 처리한다. 하지만 그때 거기에 코드가 충돌한다고 생각합니다. NSLog (@ "Glossary detail viewDidLoad start"); \t self.navigationItem.title = [정의 objectForKey : @ "word"]; [super viewDidLoad]; –
좋아, 그래서 당신이 키의 정의를 얻으려고하는 것 같아요, 그 단어를 "배열"항목에 대한. 나는 당신이 사전 대 배열의 개념에 대해 약간 불명확하다고 생각한다. NSArrays는 일반적으로 배열 당 하나 이상의 항목 인 객체의 목록입니다. NS 사전은 키 쌍과 관련 값입니다. 키는 고유 할 것입니다. 예를 들어 전체 사전에는 하나의 key = "word"만 있습니다. 모든 색인에 대해 "단어"키가 있다고 생각하는 것 같습니다. 그러면 사전에 배열을 잘못 입력했음을 알 수 있습니다. – mahboudz
배열은 항목으로 무제한의 사전을 가질 수 있습니다. 배열의 객체를 디테일 컨트롤러로 전달하면 해당 항목에서 key = "word"를 찾을 수 있습니다. 그러나 위의 사전을로드하는 방식은 그런 종류의 사용법처럼 보이지 않습니다. 아마도 다음과 같이 배열을로드하려고합니다. NSArray tempArray = [[NSArray alloc] initWithContentsOfFile : wordPath]; 이제 objectAtIndex로 얻는 각 항목은 독립적 인 사전이 될 것이므로 원하는대로 키 쌍을 추출 할 수 있습니다. 이것이 내가 제공 한 코드로 할 수있는 최선의 방법입니다. – mahboudz