2010-04-06 3 views
2

나는 이것을 사용하여 어떤보기가 다음에 갈지 결정하고 결과는 UITableView의 입력으로 결정한다. 다음 코드는 작동하지 않지만 반드시 있어야한다고 생각합니다!이 코드에 문제가 있습니까?

문제가 있습니까? 다음과 같이

NSString *option = [menuArray objectAtIndex:indexPath.row]; 


if (option == @"New Transaction"){ 

     NTItems *nTItemsController = [[NTItems alloc] initWithNibName:@"NTItems" bundle:nil]; 
     [self.navigationController pushViewController:nTItemsController animated:YES]; 
     [NTItems release]; 
} else if ([option isEqualToString:@"Previous Transactions"]){ 
} else if ([option isEqualToString:@"Reprint a reciept"]){ 
} else if ([option isEqualToString:@"Settings"]){ 
} else if ([option isEqualToString:@"Logout"]){ 
      LoginViewController *nTItemsController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil]; 
      [self.navigationController pushViewController:nTItemsController animated:YES]; 
      [nTIemsController release];  

} 

은 각 항목/객체 정의 :

[menuArray addObject:[NSDictionary dictionaryWithObjectsAndKeys: 
         NSLocalizedString(@"Logout", @"Logout"), @"title", 
         nil, 
         nil]]; 

답변

0

menuArray이 사전이 포함되어있는 경우,이 같은 현재 옵션에 타이틀 키를 얻을 수 있습니다 : 그런데

NSDictionary *option = [menuArray objectAtIndex:indexPath.row]; 

NSString *optionTitle = [option objectForKey:@"title"]; 

if ([optionTitle isEqualToString:@"New Transaction"]) {  
    NTItems *nTItemsController = [[NTItems alloc] initWithNibName:@"NTItems" bundle:nil]; 
    [self.navigationController pushViewController:nTItemsController animated:YES]; 
    [nTItemsController release]; 
} 
else if ([optionTitle isEqualToString:@"Previous Transactions"]) { 
} 
else if ([optionTitle isEqualToString:@"Reprint a reciept"]) { 
} 
else if ([optionTitle isEqualToString:@"Settings"]) { 
} 
else if ([optionTitle isEqualToString:@"Logout"]) { 
    LoginViewController *nTItemsController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil]; 
    [self.navigationController pushViewController:nTItemsController animated:YES]; 
    [nTItemsController release];  
} 

, "영수증"잘못된 철자가

2

당신은 클래스 객체를 해제하는이 아닌 clases의 인스턴스가 : 그건 정말 나쁜 생각 (당신이 [nTItemsController release]을 원하는). 두 번째로 문자열을 메모리 주소와 비교합니다. -isEqual: 또는 -isEqualToString: 메서드를 찾는 것이 가장 가능성이 높습니다. 게다가, 그것은 괜찮아 보인다.

(실제 파일에서 코드가 들여 쓰기/더 형식이 잘 갖추어지기를 바란다. 보통 블록의 마지막 줄 끝에 중괄호를 들여 쓰지 않으려 고한다.)

+0

NSCFDictionary의 isEqualToString :에 "인스턴스로 전송 된 인식 할 수없는 선택기"가 있습니다. 클래스 객체 문제를 고쳐 주셔서 감사합니다 :) – bear

+0

즉,'option'은 문자열이 아니라'NSDictionary'를 의미합니다. 'menuArray'에는 사전이 포함되어 있습니까? –

+0

수정 사항을 확인하고 사전을 사용하고 있습니다. – bear

0

"isEqualToString"을 사용하여 NSString을 비교하고 "release"메소드 메시지는 클래스 객체를 제외하고 인스턴스로 보내야합니다.

NSString *option = [menuArray objectAtIndex:indexPath.row]; 

NSAssert([option isKindOfClass [NSString class]], @"Expecting an NSString here!"); 

if ([option isEqualToString:@"New Transaction"]){ 

     NTItems *nTItemsController = [[NTItems alloc] initWithNibName:@"NTItems" bundle:nil]; 
     [self.navigationController pushViewController:nTItemsController animated:YES]; 
     [nTItemsController release]; 
} else if ([option isEqualToString:@"Previous Transactions"]){ 
} else if ([option isEqualToString:@"Reprint a reciept"]){ 
} else if ([option isEqualToString:@"Settings"]){ 
} else if ([option isEqualToString:@"Logout"]){ 
      LoginViewController *nTItemsController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil]; 
      [self.navigationController pushViewController:nTItemsController animated:YES]; 
      [nTIemsController release];  

} 
+0

NSCFDictionary의 isEqualToString : "인식 할 수없는 셀렉터가 인스턴스로 전송되었습니다"라는 메시지가 나타납니다. 클래스 개체 문제를 해결해 주셔서 감사합니다 :) – bear

0

이 시도 "재발행 재발행"에

관련 문제