0

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

4

2 回答 2

2

initWithCapacity:不会在您的数组中创建对象,因此调试器不会说谎 - 您的数组是空的,直到您向其中添加对象,无论是使用addObject:对象还是首先使用对象对其进行初始化。

于 2012-04-26T00:18:47.767 回答
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];

;)

于 2012-04-26T00:25:56.117 回答