2012-03-07 3 views
0

Эта программа должна принимать 5 NSString во входных данных и печатать их. Я положил их в NSMutableArray. Во время цикла, если я пытаюсь напечатать NSString, они напечатаны правильно. Но когда я пытаюсь получить объекты из массива, я не знаю, почему он возвращает null. Итак, если я попробую напечатать их во втором цикле, все они будут пустыми.NSMutableArray: метод getObject, возвращающий нуль

#import <Foundation/Foundation.h> 

int main (int argc, const char * argv[]) 
{ 
    NSAutoreleasePool* pool=[[NSAutoreleasePool alloc]init]; 
    NSMutableArray* array; 
    NSString* str=[[NSString alloc]init]; 
    char* cstr; 
    cstr=(char*)calloc(100,sizeof(char)); 
    for(int i=0;i<5;i++) 
    { 
     fgets(cstr,100,stdin); 
     str=[NSString stringWithUTF8String:cstr]; 
     [array addObject : str]; 
    } 
    for(int i=0;i<5;i++) 
    { 
     str=[array objectAtIndex:i]; 
     NSLog(@"%@",str); 
    }   
    [pool drain]; 
    return 0; 
} 
+0

возможно дубликат [Почему NSMutableArray показывает размер счета от 0?] (HTTP://stackoverflow.com/questions/9605251/why-is-nsmutablearray-showing-count-size-of-0) – JeremyP

+0

Возможный дубликат [Невозможно добавить элементы в NSMutableArray ivar] (http://stackoverflow.com/questions/7125326/не-добавлять-элементы-к-ан-NSMutableArray-Ивар) –

ответ

2

В этой строке:

NSMutableArray* array; 

Вы объявляете array, быть NSMutableArray, но вы не установить указатель на что-либо, поэтому array всего лишь nil.

Вы хотите сделать это вместо того, чтобы выделить и инициализировать реальный экземпляр NSMutableArray и назначить его к этому указателю:

NSMutableArray* array = [[NSMutableArray alloc] init]; 
2

Вы не инициализировали свой массив. Вы должны поставить: NSMutableArray *array = [[NSMutableArray alloc] init];

или еще лучше: NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:5];