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 に答える