2012-02-13 3 views
1

Obj C 프로그래밍에 새로운 기능이있어서 처음부터 시작합니다. 일부 NSNumber 및 NSString 요소가있는 배열이 있는데 NSString elems를 NSNumber elems로 대체하려고합니다. 나는 이것을 위해 NSMutableArray의 모든 요소 값과 NSMutableIndexSet에 인덱스를 설정하는 것을 고려했지만, 내가 이것을 만들 때 내가 문제를 겪었을 때, 여기에, 나는 당신에게 나의 코드와 로그를 보여 준다.Objective-C : 배열에서 객체의 색인을 가져옴

NSArray *oneMoreStack = [program copy]; 
NSLog(@" stack=%@",oneMoreStack); 
NSLog(@" show me index ind=%@",[oneMoreStack indexOfObject:@"x"]); 
NSMutableIndexSet *myVarIndexesSet; 
NSMutableArray *myVarsArray; 


for (id myVarConst in oneMoreStack) { 
    if([myVarConst isKindOfClass:[NSString class]]) 
    { 
     if([myVarConst isEqualToString:@"x"]){ 
      [myVarsArray addObject:myVarConst]; 
      NSLog(@"obj x=%@",myVarConst); 
      [myVarIndexesSet addIndex:[oneMoreStack indexOfObject:myVarConst]]; 
      NSLog(@"ind x=%@",[oneMoreStack indexOfObject:myVarConst]); 

     } 
} 

나는 그것이 나에게 보여 로그 실행할이 : [oneMoreStack indexOfObject:myVarConst] 반환 null 않는 이유

Calculator[6306:f803] stack=(
    x, 
    2, 
    "+" 
) 
Calculator[6306:f803] show me index ind=(null) 
Calculator[6306:f803] obj x=x 
Calculator[6306:f803] ind x=(null) 
then crash [NSMutableArray replaceObjectsAtIndexes:withObjects:]: index set cannot be nil 

그래서, 내 질문은? 어떻게 해결할 수 있습니까? 감사. 인덱스를 가져 오는 데 문제가 있다고 생각하기 때문에이 코드는 언급하지 않았습니다. 내가 이전에 언급 오류 보고서와 그 충돌 후

[stack replaceObjectsAtIndexes:[myVarIndexesSet copy] withObjects:[myVarsArray copy]]; 

: 코드의 이전 부분 후

이 부분을 간다. 감사.

답변

4

[oneMoreStack indexOfObject:myVarConst]은 개체가 아닌 원시 형식 인 NSUInteger를 반환합니다.

NSLog에서 % @을 사용하고 있습니다. "이봐 요,이 객체를 인수로 전달하고 -description을 호출하여 출력하십시오." 운 좋게도 전달중인 NSUInteger는 0이되고 NSLog는 null 객체라고 생각하고 충돌하지 않습니다. -indexOfObject :에 대한 호출이 0이 아닌 값을 반환하면 충돌이 발생할 가능성이 높습니다.

대신을 시도해보십시오

// For iOS 
NSLog(@" show me index ind=%u", [oneMoreStack indexOfObject:@"x"]); 

또는

// For 64-bit and 32-bit Mac OS X 
NSLog(@" show me index ind=%lu", (unsigned long)[oneMoreStack indexOfObject:@"x"]); 

당신은에서 문자열 형식에 대한 자세한 배울 수 있습니다 Formatting String Objects

+0

을 그래, 난 그것에 대해 생각하지 않는다, 지금 쇼를 기록 나 인덱스하지만, 로그에있는 오류 메시지가 '캐치되지 않은 예외로 인해 응용 프로그램 종료 중입니다'라는 이유로 인덱스가 모두 정상인 경우 다른 질문이 나타납니다. 'NSInvalidArgumentException', 이유 : '* ** - [NSMutableArray replaceObjectsAtIndexes : withObjects :] : 인덱스 세트는 nil이 될 수 없습니다. '인덱스 세트에 인덱스를 추가 할 때 뭔가 잘못되었습니다. ?? 감사. –

+0

죄송합니다, 나는 충돌에 대한 언급을 보지 못했습니다. 당신이 호출 한 코드로 당신의 퀴티온을 업데이트 할 수 있습니까? [NSMutableArray removeObjectsAtIndexes :], - [NSMutableArray replaceObjectsAtIndexes : withObjects :], 또는 - [NSMutableArray insertObjects : atIndexes :]? 감사! – iccir

+0

도움을 주셔서 감사합니다. 질문을 편집하십시오. –

관련 문제