IET ANOTHER EDIT(增加陌生感) EDITED 显示代码的相关部分
你好。NSMutableArray 有一个奇怪的问题,我只是不明白......
解释:
我有一个 NSMutableArray,定义为一个属性(非原子,保留),合成并用 29 个元素初始化。
realSectionNames = [[NSMutableArray alloc] initWithCapacity:29];
初始化后,我可以根据需要插入元素,一切似乎都正常。
但是,当我运行应用程序时,如果我在数组中插入一个新元素,我可以在插入元素的函数中打印该数组,一切似乎都正常。
但是,当我在表中选择一行并且需要读取该数组时,我的应用程序崩溃了。事实上,它甚至不能再打印数组了。
在使用像我这样的初学者可能会丢失的 NSMutableArray 时,每个人都应该知道什么“神奇和合乎逻辑的技巧”吗?
非常感谢。
我将我的数组声明为
realSectionNames = [[NSMutableArray alloc] initWithCapacity:29];
我在我的数组中插入对象
[realSectionNames addObject:[category categoryFirstLetter]];
虽然我知道我也可以用
[realSectionNames insertObject:[category categoryFirstLetter] atIndex:i];
其中“i”是第一个未占用的位置。
插入后,我重新加载了我的 tableView 的数据。在重新加载数据之前或之后打印数组表明它具有所需的信息。
之后,在表中选择一行会使应用程序崩溃。这个 realSectionNames 用在了几个 UITableViewDelegate 函数中,但对于这种情况,它并不重要。真正重要的是在 didSelectRowAtIndexPath 函数的开头打印数组会使所有内容崩溃(当然,不会打印任何内容)。我很确定它在该行中,用于打印他在工作之前行的任何内容(示例):
NSLog(@"Anything");
NSLog(@"%@", realSectionNames);
给出输出:
2010-03-24 15:16:04.146 myApplicationExperience[3527:207] 任何东西
[会话开始于 2010-03-24 15:16:04 +0000。] GNU gdb 6.3.50-20050815(Apple 版本 gdb-967)(2009 年 7 月 14 日星期二 02:11:58 UTC)版权所有 2004 自由软件基金会, Inc. GDB 是自由软件,受 GNU 通用公共许可证保护,欢迎您在特定条件下更改和/或分发它的副本。键入“显示复制”以查看条件。GDB 绝对没有任何保证。键入“显示保修”以获取详细信息。此 GDB 配置为“i386-apple-darwin”。sharedlibrary apply-load-rules all 附加到进程 3527。
还是不明白我这一次做了什么蠢事……也许现在追随脑外科医生的职业还不算太晚?
在回答之后,我打印了
NSLog(@"self=%x", self);
NSLog(@"self=%@", self);
NSLog(@"realSectionNames=%x", realSectionNames);
在每个函数中给出完全相同的结果(无论是否来自委托)。
NSLog(@"realSections = %@", realSectionNames);
在我的 viewWillAppear 中,在 didSelectRowAtIndexPath 中打印良好,在 viewForHeaderInSection 中崩溃。顺便说一句,没有线程...
所以,在不知道该怎么做的情况下,我正在尝试“事情”......我将 realSectionNames 的所有引用更改为 self.realSectionNames
在 viewForHeaderInSection 中打印会出现以下问题:
2010-03-24 16:01:44.067 myApplication[4104:207] numberOfSectionsInTableView result -> 1
2010-03-24 16:01:44.068 myApplication[4104:207] viewForHeaderAtSection
2010-03-24 16:01:44.068 myApplication[4104:207] self=3d13470
2010-03-24 16:01:44.068 myApplication[4104:207] self=<RootViewController: 0x3d13470>
2010-03-24 16:01:44.069 myApplication[4104:207] self.realSectionNames=3b12830
2010-03-24 16:01:44.070 myApplication[4104:207] realSections = (
<__NSArrayReverseEnumerator: 0x3b50500>
)
2010-03-24 16:01:44.070 myApplication[4104:207] *** -[__NSArrayReverseEnumerator length]: unrecognized selector sent to instance 0x3b50500
2010-03-24 16:01:44.071 myApplication[4104:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayReverseEnumerator length]: unrecognized selector sent to instance 0x3b50500'
2010-03-24 16:01:44.072 myApplication[4104:207] Stack: (
31073371,
2572170505,
31455291,
31024758,
30877378,
276908,
26404,
3227182,
4544033,
4551926,
4550923,
3267462,
3207973,
3249408,
25927,
3222086,
3205252,
459178,
30857920,
30854216,
39163413,
39163610,
2949039
)
什么是 NSArrayReverseEnumerator???为什么它对我很刻薄???