无法在NSMutableArray中存储对象

时间:2011-10-27 13:13:41

标签: objective-c xcode nsmutablearray nsarray

我有扫描并返回NSString的代码,如下所示:

NSString *GetText = [[NSString alloc] init];
NSString *ScannedText;
NSScanner *TheScanner = [NSScanner scannerWithString:somLongString];
int start=0;
int index=0;
int ObjectCount;
char c;
for (int i = 0; i < [somLongString length] ; i++) {
    c = [somLongString characterAtIndex:i];
    if (c == '=') {
        start = i+1;
        [TheScanner setScanLocation:start];
        [TheScanner scanUpToString:@"&" intoString:&GetText];
        NSLog( @"%@",GetText);
        [UserValuesObject insertObject:GetText  atIndex:index];
        NSLog(@"%@",[UserValuesObject objectAtIndex:index]);
        index++;
    }
}

现在我想将每次创建的GetText对象添加到数组中。当我尝试打印第一个:

NSLog(@"%@",GetText); 

它有效!但是当我想把它添加到对象然后打印(用于调试)时,我在每个日志的打印上都得到null

NSLog(@"%@",[UserValuesObject objectAtIndex:index]);

任何想法?

2 个答案:

答案 0 :(得分:0)

我认为NSMutableArray,UserValuesObject是nil,因此不允许你设置数组的任何对象。

在进入for循环之前,请尝试检查数组是否为nil。

if (UserValuesObject == nil) {
    UserValuesObject = [NSMutableArray array];
}

答案 1 :(得分:0)

您可能没有正确初始化阵列(或根本没有),请尝试此操作(包括语法改进):

NSString *getText = [NSString string];
NSScanner *scanner = [NSScanner scannerWithString:someLongString];
NSUInteger start = 0;
NSUInteger index = 0;
NSMutableArray *userValuesObject = [NSMutableArray array];
//  You should save the length of someLongString before starting the loop 
//   so that each iteration doesn't have to call length to see if i has 
//   reached length yet
for (int i = 0, len = [someLongString length]; i < len; ++i) {
    if ([somLongString characterAtIndex:i] == '=') {
        [scanner setScanLocation:(i + 1)];
        [scanner scanUpToString:@"&" intoString:getText];
        NSLog(@"%@", GetText);
        [userValuesObject insertObject:getText atIndex:index];
        NSLog(@"%@", [userValuesObject objectAtIndex:index]);
        ++index;
    }
}

来自NSMutableArray Docs

insertObject:atIndex:
     

参数

     

anObject - 要添加到数组内容的对象。这个值必须   不是零。

     

重要提示:如果anObject为nil,则为RaisesanNSInvalidArgumentException。

     

index - 数组中插入anObject的索引。这个   value不得大于数组中元素的数量。

     

重要提示:如果index大于数组中元素的数量,则引发NSRangeException。

     

如果索引已被占用,则索引处及以后的对象为   通过在他们的指数上加1来腾出空间。注意NSArray   对象不像C数组。也就是说,即使您指定了大小   创建数组时,指定的大小被视为“提示”;   数组的实际大小仍为0.这意味着你不能   在索引处插入一个大于当前计数的对象   阵列。例如,如果数组包含两个对象,则其大小为2,   所以你可以在索引0,1或2处添加对象。索引3是非法的   出界;如果您尝试在索引3处添加对象(当大小时   数组是2),NSMutableArray引发异常。