2009-12-24 2 views
0

약 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"]; 

답변

0

당신이 액세스하려고하는 것으로 보인다 연관된 값을 검색하기 위해 키를 사용하는 대신 인덱스를 사용하여 사전의 구성원을 검색 할 수 있습니다. 당신의 didSelectRow에서

아마 당신이 원하는 :

glossaryDetailViewController.definition = [self.wordKeys objectAtIndex:indexPath.row]; 

의 차이는 이제 당신이 액세스하려는 인덱스 배열의 멤버.

+0

고마워요. 네 말이 맞을거야. 나는 그것을 변경했고 코드는 이제 detailcontroller를 통해 처리한다. 하지만 그때 거기에 코드가 충돌한다고 생각합니다. NSLog (@ "Glossary detail viewDidLoad start"); \t self.navigationItem.title = [정의 objectForKey : @ "word"]; [super viewDidLoad]; –

+0

좋아, 그래서 당신이 키의 정의를 얻으려고하는 것 같아요, 그 단어를 "배열"항목에 대한. 나는 당신이 사전 대 배열의 개념에 대해 약간 불명확하다고 생각한다. NSArrays는 일반적으로 배열 당 하나 이상의 항목 인 객체의 목록입니다. NS 사전은 키 쌍과 관련 값입니다. 키는 고유 할 것입니다. 예를 들어 전체 사전에는 하나의 key = "word"만 있습니다. 모든 색인에 대해 "단어"키가 있다고 생각하는 것 같습니다. 그러면 사전에 배열을 잘못 입력했음을 알 수 있습니다. – mahboudz

+0

배열은 항목으로 무제한의 사전을 가질 수 있습니다. 배열의 객체를 디테일 컨트롤러로 전달하면 해당 항목에서 key = "word"를 찾을 수 있습니다. 그러나 위의 사전을로드하는 방식은 그런 종류의 사용법처럼 보이지 않습니다. 아마도 다음과 같이 배열을로드하려고합니다. NSArray tempArray = [[NSArray alloc] initWithContentsOfFile : wordPath]; 이제 objectAtIndex로 얻는 각 항목은 독립적 인 사전이 될 것이므로 원하는대로 키 쌍을 추출 할 수 있습니다. 이것이 내가 제공 한 코드로 할 수있는 최선의 방법입니다. – mahboudz