我有一个合成的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
答案 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);
你想做什么?