Cannot add items to an NSMutableArray ivar
我的目标是将一个字符串添加到数组中,并在我调用的方法中做到这一点。
用这种方法,我在数组中得到一个空值,不知道为什么。 我上课的时候有这个:
1
| NSMutableArray *listOfEvents; |
和我在每个事件上调用的方法:
1 2 3 4 5
| -(void)EventList
{
[listOfEvents addObject:@"ran"];
NSLog(@"%@", listOfEvents);
} |
我在日志中得到(null)。
如果将数组定义NSMutableArray *listOfEvents;放在函数主体中,则每次都会得到字符串值@"ran",因此数组始终只有一个值,而不是包含许多名为@"ran"的字符串。
这怎么了 即使我已经阅读了很多次文档,看来我也不了解数组。
-
NSMutableArray addObject的可能重复项不起作用或将对象添加到NSMutableArray或NSMutableArray addObject时出现问题,不影响计数
我假设您尚未初始化listOfEvents。
确保在类的init方法中执行listOfEvents = [[NSMutableArray alloc] init];。 还要确保在类的dealloc方法中释放它。
-
好的,我做了listOfEvents = [[[NSMutableArray alloc] init];在函数体中,因此我只获得了ran值,但只有一个值。它不会一次又一次地添加此字符串..为什么呢?
-
如果您对类的每个实例多次运行EventList,则它将继续将字符串添加到数组中。如果您每次使用一个新的类实例运行EventList,那么该数组显然每次也都是一个新数组。
-
谢谢。我无法理解您,每当我按下一个按钮(我使用cocos2d)时,我都会调用此功能。为了一次又一次地添加新值,我必须更改什么?它作为我的类的实例运行。
-
如果您提出了一个包含整个班级代码以及您从何处调用的新问题,这将很有帮助。
-
listOfEvents=[[NSMutableArray alloc] init];是正确的,但是您需要将其移动到类init方法中,因此仅调用一次。
-
非常感谢。它有效,但我不知道为什么。您能指导我阅读更多吗?关于alloc我可能不了解。谢谢。
如果您在日志消息中得到nil,则需要在添加对象之前确保listOfEvents为非nil。 IE浏览器:
1 2 3 4 5 6 7 8
| -(void)EventList
{
if (listOfEvents == nil) {
listOfEvents = [[NSMutableArray alloc] init];
}
[listOfEvents addObject:@"ran"];
NSLog(@"%@",listOfEvents);
} |
在Objective-C中,具有void的消息返回类型发送到nil到绝对静默的无处。
另外,为了平衡起见,请确保在dealloc实现中调用了[listOfEvents release]。
-
非常感谢。我做到了,但后来我只看到价值在奔跑。即使我叫了10次,也只出现一个字符串值。
-
有两点要注意:记录nil将打印(null),并且任何发送到nil的消息都不会执行任何操作,无论该方法的返回类型如何。
您需要alloc NSMutableArray。 首先尝试执行此操作-
NSMutableArray *listOfEvents = [[NSMutableArray alloc] init];
之后,您可以按照计划进行操作...
显然您没有初始化数组。
1
| NSMutableArray *listOfEvents = [[NSMutableArray alloc] init]; |
如果那是您的问题,我建议再次阅读文档。 而不是NSMutableArray文档。 返回到Objective-C编程语言等。