我正在尝试初始化NSMutableArray并且它无法正常工作。对数组的后续访问会引发异常,说“索引0超出空数组的边界”。初始化行后面的断点表示我的数组在内存中有一个位置,但它有0个对象
这是我此刻的尝试:
在我的.h
@interface SomeInterface : NSObject
{
@private
NSMutableArray *myArr;
}
在我的.m
- (id) initWithHeight: (int) height
{
self = [super init];
if (self)
{
self->myArr = [[NSMutableArray alloc] initWithCapacity:height];
}
return self;
}
断点显示myArr =(NSMutableArray *)0x ######## 0个对象
有谁知道如何正确初始化NSMutableArray?
答案 0 :(得分:2)
initWithCapacity:
不会在数组中创建对象,因此调试器没有说谎 - 在向对象添加对象之前,您的数组是空的,可以使用addObject:
或使用对象初始化它第一名。
答案 1 :(得分:1)
因为yonix指出你没有创建任何对象,这里是一个添加你的对象的例子:
·H
#import <Foundation/Foundation.h>
@interface Ssuti : NSObject
{
NSMutableArray *_myArr;
}
@property (nonatomic, assign) NSMutableArray *myArr;
- (id) initWithHeight: (int) height;
@end
的.m
#import "Ssuti.h"
@implementation Ssuti
@synthesize myArr = _myArr;
- (void)dealloc {
[super dealloc];
}
- (id) initWithHeight: (int) height
{
self = [super init];
if (self)
{
self.myArr = [NSMutableArray array];
[self.myArr addObject:[NSNumber numberWithInt:height]];
NSLog(@"myArr :: %@", self.myArr);
}
return self;
}
@end
然后在ViewController中调用它:
Ssuti *mySssuti = [[Ssuti alloc]initWithHeight:345];
[mySssuti release];
)