在Index处将对象添加到Objective C数组

时间:2009-08-18 17:00:51

标签: iphone objective-c cocoa-touch insert nsmutablearray

我有一个合成的NSMutableArray - theResultArray。我想在特定索引(0-49)处插入NSNumber或NSInteger对象。出于某种原因,我永远无法在我的数组中获得任何值。每个索引都返回nil或0。

    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]);

我在viewDidLoad中使用alloc-init theResultsArray。时间是整数。我一直尝试上面代码的不同组合无济于事。

控制台输出:

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

3 个答案:

答案 0 :(得分:5)

除非我误读,你不是在插入一个NSInteger,而是试图取出一个NSNumber吗?这是两种完全不同的数据类型。你得到奇怪的结果并不让我感到惊讶。

此外,NSInteger不是对象,因此您无法将其粘贴到数组中。您可能希望分配一个带有该整数的NSNumber并将其放入。

尝试类似:[theResultArray addObject:[NSNumber numberWithInteger:timeNum] atIndex:rightIndex];

同样,当您检索该值时,您需要将其取消包装:

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

同样,当您检索该值时,您需要将其取消包装:

坦率地说,我甚至有点惊讶,这甚至可以编译。

答案 1 :(得分: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];

实现起来非常简单,但根据上下文,您可能希望以其他方式使用。

答案 2 :(得分: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);

你想做什么?