0

我已经查看了其他 SO 讨论,但似乎找不到答案。在基本上以下代码之后,我得到了这个答案:

1) 在拥有 AwesomeMenu 的类中,我正在制作 AwesomeMenuItems 的 NSMutableArray,这是初始化 AwesomeMenu 所必需的:

NSMutableArray *menus = [[[NSMutableArray alloc] init] autorelease];
[menus addObject:starMenuItem1];
[menus addObject:starMenuItem2];
[menus addObject:starMenuItem3];
[menus addObject:starMenuItem4];
[menus addObject:starMenuItem5];

AwesomeMenu *menu = [[[AwesomeMenu alloc] initWithFrame:self.view.bounds menus:menus view:self.view] autorelease];

2)在 AwesomeMenu.h 中,我在接口中声明了数组,如下所示:

NSMutableArray *_menusArray;

我为数组创建了一个属性:

@property (nonatomic, retain) NSMutableArray *menusArray;

它是合成的:

@synthesize menusArray = _menusArray;

3)在 initWithFrame: menus: view: 中,我像这样分配 menus 参数:

- (id)initWithFrame:(CGRect)frame menus:(NSMutableArray *)aMenusArray view:(UIView*)gView
{
    self = [super initWithFrame:frame];
    // ... some code
    self.menusArray = aMenusArray; // BREAKPOINT HERE.
    // ... some more code
}

4)我在作业中设置了一个断点,这就是发生的事情。在该行运行之前,我检查了我的 self.menusArray,它是: (NSMutableArray *)0x00000000 0 Objects

我越过这条线,它变成: (__NSArrayI *) 0x06045070 5 个对象。

虽然这是正确数量的对象,但它不再是 NSMutableArray ,这让我以后遇到问题!

正在发生什么,我怎样才能阻止它发生?

4

2 回答 2

0

__NSArrayI 它是不可变数组,您传递给 initWithFrame 方法 NSArray,而不是 NSMutable 数组

解决方案:

self.menusArray = [NSMutableArray arrayWithArray:aMenusArray]; // BREAKPOINT HERE.
于 2012-10-11T18:10:06.720 回答
0

检查AwesomeMenu.h文件中以下内容的声明。确保您也将 the 更改NSArrayNSMutableArray那里。这也可能导致这个问题。

- (id)initWithFrame:(CGRect)frame menus:(NSMutableArray *)aMenusArray view:(UIView*)gView;

更新: 只是一个注释。在 init 方法中,在为 self 分配内存后总是使用以下内容。

if (self) {
   //code goes here
}

更新2:self.menusArray = aMenusArray;改为_menusArray = [aMenusArray retain]

根据苹果文档,您不应该使用self.paramin initanddealloc方法,因为它处于内存分配/销毁过程中,尚未完成。

于 2012-10-11T18:16:04.590 回答