我在使用 NSMutableArray 擦除其内容时遇到问题。
考虑我的代码:(int i; 和 NSMutableArray* newFileControllerArray 一样在我的文件的 .h 中)
-(void)awakeFromNib{
i = 0;
newFileWindowControllerArray = [[NSMutableArray alloc]init];
}
-(IBAction)newFileMenubar:(id)sender{
[newFileWindowControllerArray addObject:[[NewFileWindowController alloc]initWithWindowNibName:@"NewFileWindowController"]];
NSUInteger elementsInArray = [newFileWindowControllerArray count];
NSLog(@"%lu",(unsigned long)elementsInArray);
[[newFileWindowControllerArray objectAtIndex:i] showWindow:nil];
}
-(IBAction)OKButtonClicked:(id)sender{
NSUInteger elementsInArray = [newFileWindowControllerArray count];
NSLog(@"THERE ARE %lu ELEMENTS IN THE ARRAY",(unsigned long)elementsInArray);
}
第一个调用的方法(除了awakeFromNib:
)是newFileMenubar:
这将向数组添加一个元素。我可以确认这是有效的,因为 1 打印在控制台中。但是,一旦OKbutton
被调用,我打印出数组中的元素数,它表示数组中没有元素。这是为什么?
我在这里遗漏了一些非常明显的东西吗?为什么我的阵列会自行重置?
编辑: 评论变得冗长而笨拙,所以这里是带有 NSLogs 和输出的代码:
-(void)awakeFromNib{
i = 0;
newFileWindowControllerArray = [NSMutableArray array];
NSLog(@"self=%p, array=%p", self, newFileWindowControllerArray);
}
-(IBAction)newFileMenubar:(id)sender{
[newFileWindowControllerArray addObject:[[NewFileWindowController alloc]initWithWindowNibName:@"NewFileWindowController"]];
[[newFileWindowControllerArray objectAtIndex:i] showWindow:nil];
i++;
NSLog(@"self=%p, array=%p", self, newFileWindowControllerArray);
}
-(IBAction)OKButtonClicked:(id)sender{
NSUInteger elementsInArray = [newFileWindowControllerArray count];
NSLog(@"self=%p, array=%p", self, newFileWindowControllerArray);
[documentController newDocument:sender];
[[newFileWindowControllerArray objectAtIndex:i]close];
}
当程序启动时,输出如下: self=0x100141480, array=0x100140f30 这应该来自 awakeFromNib:
下一个调用的方法是 newFileMenubar:
这个的输出是
self=0x1001ac990, array=0x1005228a0 和 self=0x100141480, array=0x100140f30 之后
最后调用的方法是 OKButtonClicked:
最后一个方法(OKButtonClicked:)的输出是 self=0x1001ac990, array=0x1005228a0
正如您从代码中看到的那样,数组的名称没有改变,但我的输出却不一样?什么可能导致这种情况?