【问题标题】:Array not retaining properly?阵列未正确保留?
【发布时间】:2011-09-02 13:54:05
【问题描述】:

运行我的应用程序时出现以下错误:

2011-09-02 15:38:44.157 TheApp[9973:207] -[NSCFNumber isEqualToString:]:无法识别的选择器发送到实例 0x4b28990

2011-09-02 15:38:44.160 TheApp[9973:207] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSCFNumber isEqualToString:]:无法识别的选择器发送到实例 0x4b28990”

并且 Xcode 将这个函数中的行标记为绿色:

- (void)oneCheckAndSetStrokes {
playerOneScoreNum.text = [playerOneScore objectAtIndex:(11)]; }

因此,我猜想阵列出了点问题。经过一番研究,我发现了很多类似这样的帖子:NSMutableArray : unrecognized selector sent to instance,这似乎表明当数组没有正确保留时会发生错误(因此我的标题)。

所以我试图将数组保留在启动它的文件中(顺便说一下,它与上面的代码不是同一个文件。数组也在另一个文件 Globals.h 中定义,然后导入),通过以下方式:

- (void)viewDidLoad {
[super viewDidLoad];
playerOneScore = [[NSMutableArray alloc] initWithCapacity:19];
[playerOneScore retain]; }

根据前面提到的帖子,这将解决问题,但在我的情况下它没有。有没有人遇到过类似的事情?似乎我在这里遗漏了一些琐碎的事情。

【问题讨论】:

  • 首先,如果你分配一个 NSMutable 数组,你不必保留它。确保它不会意外地在其他地方发布。另请注意,这可能无关紧要,但是您为什么将 11 放在“()”中?我很确定这是不必要的。
  • 感谢您的评论,daveoncodes 帖子中的解决方案。是的,关于 (11),我不知道我为什么这样做。

标签: objective-c ios arrays retain


【解决方案1】:

你得到的错误与保留无关,你得到那个错误是因为在这一行:

playerOneScoreNum.text = [playerOneScore objectAtIndex:(11)];

您正在尝试使用数字对象设置字符串属性!您必须以这种方式使用“stringValue”:

playerOneScoreNum.text = [[playerOneScore objectAtIndex:11] stringValue];

ps:用括号包裹索引(11)是没有用的:P

【讨论】:

  • 谢谢daveoncode,你说的完全正确,stringValue 解决了!关于(11),我不知道,我猜是习惯的力量:P
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2012-10-04
  • 2019-05-31
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 2013-03-25
相关资源
最近更新 更多