1

我有一个合成的 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 中分配初始化 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
4

3 回答 3

5

除非我看错了,否则你不是插入了一个 NSInteger,然后又试图取出一个 NSNumber 吗?这是两种完全不同的数据类型。你得到奇怪的结果并不让我感到惊讶。

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

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

同样,当您检索该值时,您需要将其拆箱:

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

同样,当您检索该值时,您需要将其拆箱:

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

于 2009-08-18T17:04:31.510 回答
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];

这很容易实现,但根据上下文,您可能希望使用另一种方式。

于 2009-08-18T17:27:37.097 回答
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);

你想做什么?

于 2009-08-18T17:14:01.053 回答