NSMutableArray initWithCapacity失败

时间:2012-04-26 00:10:11

标签: objective-c nsmutablearray init

我正在尝试初始化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?

2 个答案:

答案 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];