2009-08-18 8 views
1

합성 된 NSMutableArray - theResultArray가 있습니다. 특정 인덱스 (0-49)에 NSNumber 또는 NSInteger 개체를 삽입하고 싶습니다. 웬일인지 나는 나의 배열에 고집 할 어떤 가치도 얻을 수 없다. 모든 인덱스은 nil을 반환 또는 0목표 C 배열에 인덱스에 객체 추가

NSInteger timeNum = time; 
    [theResultArray insertObject:[NSNumber numberWithInt:timeNum] atIndex:rightIndex]; 
    NSLog(@"The right index is :%i", rightIndex); 
    NSLog(@"The attempted insert time :%i", time); 
    NSNumber *testNum = [theResultArray objectAtIndex:rightIndex]; 
    NSLog(@"The result of time insert is:%i", [testNum intValue]); 

는 I에있는 viewDidLoad에 theResultsArray을 ALLOC-init을. 시간은 정수입니다. 위의 코드를 여러 가지 조합으로 사용해 보았습니다.

콘솔 출력이 :

StateOutlineFlashCards[20389:20b] The right index is :20 
StateOutlineFlashCards[20389:20b] The attempted insert time :8 
StateOutlineFlashCards[20389:20b] The result of time insert is:0 
+0

시간이 정수인 이유는 왜 정수이고 시간과 동일한 timeNum이 필요합니까? – mk12

+0

나는 객관적인 c와 코코아를 잘 모른다. 아마도 NSInteger 객체가 객관적인 c int보다 더 잘 작동 할 것이라고 생각했습니다. – Bryan

+0

아래 답변에서 모든 변경을가했지만 여전히 정확한 결과를 얻고 있습니다. – Bryan

답변

4

init 또는 viewDidLoad 메서드에서 배열의 메모리를 할당해야합니다. 그렇지 않으면 아무 것도 저장할 수 없습니다.

당신이 할 경우이 :

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { 
     // Custom initialization   
     myMutableArrayName = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 

또는이 : 그것은 당신을 위해 일한다

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    myMutableArrayName = [[NSMutableArray alloc] init]; 
} 

.

정수를 NSMutableArray에 저장하는 것에 관해서는 최근 간단하지만 다소 "hackish"한 접근법을 사용했습니다. 나는 그들을 문자열로 저장한다.내가 그들을 넣을 때 나는 사용 :

[NSString stringWithFormat:@"%d", myInteger]; 

그리고 내가 그들을 꺼내 때 나는로 변환 : 구현할 수 있지만, 상황에 따라 다른 방법을 사용할 수 있습니다 정말 쉬웠다

[[myArray objectAtIndex:2] intValue]; 

.

+3

NSNumbers로 저장하는 것은 훨씬 간단합니다. [NSNumber numberWithInt : ]입니다. 값을 다시 가져 오는 것은 [((NSNumber *) [array objectAtIndex : ]) intValue]입니다. – Amagrammer

+0

"myMutableArrayName"을 "theResultArray"로 변경 했습니까? 붙여 넣은 코드에서 여전히 샘플 이름이 있다는 것을 알았습니다. NSString을 사용하면 프로그램의 특정 지점에서 데이터에 대해 문자열 비교/함수를 수행하지 않는 한 이점이 없습니다. 그렇지 않다면 Amagrammer의 조언을 따르십시오. – Mark

+0

흠. . 흥미 롭다. 당신의 뷰에 명시 적 alloc/init이로드되어 있다면, 배열에 무엇이 있는지 테스트 해보십시오 : NSLog (@ "Count of array is : % d", theResultArray.count); 0보다 큰 수를 반환하면 배열에 결과가 저장된다는 의미입니다. – Mark

5

내가 잘못 읽고있어 않는 한, 당신은의 NSNumber를 꺼내려고 다음 NSInteger를 삽입하지만,하지 않습니다? 이들은 완전히 다른 두 가지 데이터 유형입니다. 당신이 이상한 결과를 얻고 있다는 것을 놀라지 않습니다.

또한 NSInteger는 개체가 아니므로 배열에 집어 넣을 수 없습니다. 당신은 아마 그 정수와 함께의 NSNumber를 할당하고에 그 퍼팅되고 싶어

같은 것을 시도해보십시오. 마찬가지로 [theResultArray addObject:[NSNumber numberWithInteger:timeNum] atIndex:rightIndex];

, 당신이 값을 검색 할 때, 당신이 그것을 언 박싱해야합니다을 :

NSLog(@"The result of time insert is:%i", [testNum integerValue])`; 

마찬가지로 값을 검색 할 때 값을 다시 입력해야합니다.

솔직히 말해서 나는 이것이 심지어 컴파일되는 것에 놀랐습니다.

+0

제안 해 주셔서 감사합니다. 나는 당신의 조언을 받았지만 여전히 같은 결과를 얻고 있습니다. 업데이트 된 코드를보고 더 많은 제안 사항을 알려주십시오. 나는 첫 번째 퀴즈 앱을 만드는 코코아에 완전히 익숙하지 않다. – Bryan

+0

질문에있는 코드가 나에게 똑같아 보입니다. 컴파일 오류가 발생합니까? – peterb

+0

컴파일 오류가 발생하지 않습니다. rightIndex의 theResultArray에 대한 값만 출력됩니다. – Bryan

1
NSInteger timeNum = time; 

그게 뭐야? "시간"이란 무엇입니까?

[theResultArray addObject:timeNum atIndex:rightIndex]; 

-addObject : atIndex : 메서드가 없습니다. -insertObject : atIndex :입니다. "rightIndex"에 삽입하는 이유는 무엇입니까? 왜 그냥 -addObject :를 사용하지 않는가?

//[theResultArray replaceObjectAtIndex:rightIndex withObject:[NSNumber numberWithInt:timeNum]]; 

무엇이며 왜 주석 처리 되었습니까?

NSLog(@"The right index is :%i", rightIndex); 
    NSLog(@"The attempted insert time :%i", time); 
    NSNumber *testNum = [theResultArray objectAtIndex:rightIndex]; 
    //int reso = [testNum integerValue]; 
    NSLog(@"The result of time insert is:%i", testNum); 

무엇을하려하십니까?

+0

시간은 객관적인 c int입니다. 오른쪽 인덱스는 개체를 추가 할 인덱스입니다. Reso는 사용되지 않았기 때문에 주석으로 처리됩니다. 무작위로 질문하는 50 개의 질문이 있으며 그 결과는 해당 질문의 해당 색인에 저장됩니다. – Bryan