我试图让下面的循环来填充数组:
while (condition) {
[itemsArray fillFromDB];
if (! [checkArray containsObject:checkFlag]) {
// Add existing itemsArray to myArray
if (itemsArray.count) {
// add the itemsArray to myArray and create a new instance of itemsArray
[myArray addObject:itemsArray];
[itemsArray release];
NSMutableArray *itemsArray = [[NSMutableArray alloc] init];
}
[itemsArray addObject:myObject];
[checkArray addObject:checkFlag];
} else {
[itemsArray addObject:tmpEvent];
} }然而,我试图塑造这个循环,它落在了itemsArray的发行版上。
当我使用
的数组也是空的。
我往哪里走错方向了?
发布于 2010-04-25 08:36:12
你可以把:
itemsArray = nil;在release消息之后,确保您没有指向旧实例。
编辑
再看一遍,你有:
NSMutableArray *itemsArray = [[NSMutableArray alloc] init];这是if语句中的作用域。
因此,取出NSMutableArray,只需使用:
itemsArray = [[NSMutableArray alloc] init];发布于 2010-04-25 08:49:57
不要写NSMutableArray *itemsArray = [[NSMutableArray alloc] init];--在if语句范围内重新声明变量,所以在if语句之外,itemsArray仍然会引用旧的值(我不知道编译器为什么没有抱怨)。你可以直接说itemsArray = [[NSMutableArray alloc] init]。
您也可能希望使用自动发布来简化。
发布于 2010-04-25 09:08:09
其他人发现了这个问题,但却制造了一个新的问题。第一次创建可变数组时,需要使用NSMutableArray *itemsArray = [[NSMutableArray alloc] init];。然后,您可以使用release并使用itemsArray = [[NSMutableArray alloc] init];。重要的是,第一个(创建指针的)只发生一次,其余的可以按需要发生多次。
编辑:您可以在NSMutableArray *itemsArray;语句之前编写if,然后在if语句中使用itemsArray = [[NSMutableArray alloc] init];。
https://stackoverflow.com/questions/2707629
复制相似问题