2012-03-06 2 views
3

의 배열 오류 "문은 정수 타입의 표현이 필요"하지만 나에게주는 바로 스위치에서 "문은 정수형의 발현 (무효 '아이디')가 필요합니다" 성명서. 뭐가 문제 야?switch 문 및 배열 작업을 시도 문자열

NSArray count = [NSArray arrayWithObjects: @"1", @"2", @"3", @"4", @"5", @"6", @"7", nil];  

switch ([count objectAtIndex: myIndex]) { 
    case 1: 
     NSLog(@"One"); 
     break; 
    case 2: 
     NSLog(@"Two"); 
     break; 
    case 3: 
     NSLog(@"Three"); 
     break; 
    default: 
     break; 
} 
+6

난 당신이 기본적인 프로그래밍 지식 ... 내 조언을 누락 생각을, 0에서 시작하고 일주일에 모든 것을 배우려고하지 않는다 . 또한 학습서를 사용하여 책을 읽거나 수업에 참여하지 마십시오 (가능한 경우). – EmilioPelaez

답변

9

. 배열에 NSString 개의 개체가 있습니다. 이 같은 정수로 배열에서 얻을 NSString 변환 :

NSArray count = [NSArray arrayWithObjects: @"1", @"2", @"3", @"4", @"5", @"6", @"7", nil]; 

NSString *obj = [count objectAtIndex: myIndex]; 
switch ([obj intValue]) { 
    case 1: 
     NSLog(@"One"); 
     break; 
    case 2: 
     NSLog(@"Two"); 
     break; 
    case 3: 
     NSLog(@"Three"); 
     break; 
    default: 
     break; 
} 
+0

ooooh 저는 이것도 역시 – QED

+0

배열에 NSNumbers를 저장하지 않으시겠습니까? 숫자를 문자열로 저장하는 것은 약간 깨지기 쉽습니다 ... – bryanmac

+0

@bryanmac 더 감각적 이겠지만 ... NSNumber는 여전히 객체이므로 switch 문에서 사용할 정수 값을 추출해야합니다. – highlycaffeinated

2

int에 대해 리터럴 NSString 배열을 만들고 case 문을 수행하고 있습니다. 정수 계열 만 스위치 할 수 있습니다.

문제는 arrayWithObjects가 개체 (id)에서 전환 할 수없는 NSObject 파생 개체 배열을 만드는 것입니다.

숫자 배열을 저장하려면 하나의 옵션은 숫자가되기를 희망하는 문자열을 저장하는 것이 아니라 NSNumber 개체를 저장하는 것입니다. 이 작품 :

NSArray *arr = [NSArray arrayWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:2], nil]; 

switch ([[arr objectAtIndex:1] intValue]) { 
    case 1: 
     NSLog(@"1"); 
     break; 

    case 2: 
     NSLog(@"2"); 
     break; 

    default: 
     break; 
} 

그것은 출력 :

2012-03-05 23:23:46.798 Craplet[82357:707] 2 
+0

또 다른 문제는 배열에서 - (void) viewDidLoad 메서드를 시작했지만 다른 메서드에서 액세스 할 수 없다는 점입니다. 전역 배열을 만드는 방법은 무엇입니까 (일반적으로 전역 변수)? – NoobDev4iPhone

+0

싱글 톤 패턴을 체크 아웃하십시오. – bryanmac

+0

http://stackoverflow.com/questions/145154/what-does-your-objective-c-singleton-look-like – bryanmac

1

[count objectAtIndex:]이 특정 경우에는 NSString 것 이드 (일명 개체), 반환, 어느 경우에 해당하지 int로 그 사건을 표현이 예상됩니다. NSString을 정수로 변환하려면 [[count objectAtIndex:myIndex] intValue]이 필요합니다.

1

배열 개체는 int가 아니라 NSString입니다. 당신이 성취하고자하는 큰 그림은 무엇입니까?

NSString *str = [count objectAtIndex:myIndex]; 
if ([str isEqualToString:@"1"]) NSLog(@"One"); 
else if ... // etc 

더 나은 아직 :

당신은 할 수

스위치 문은 정수형에서 작동

static NSString *one = @"1"; 
static NSString *two = @"2"; 
// etc 

NSArray *count = [NSArray arrayWithObjects:one, two, ... nil]; 

NSString *str = [count objectAtIndex:myIndex]; 

if (str == one) NSLog(@"One"); // this works because now 'str' and 'one' are the same object 
else if ... // etc