我有一个很奇怪的问题,我似乎无法看到原因。类别扩展不一致iOS 10+
我对NSDictionary有一个名为title的方法的类别扩展。该方法的工作原理如下:
- (NSString*)title {
return self[@"title"];
}
这是什么让我做的,是有一个方法在NSDictionary传回标题。
下面是使用的例子:
NSDictionary *config = [mConfigManager currentConfig];
if ([config title]) {
return [config title];
}
return @"";
现在,这是事情变得奇怪。在iOS 10上,标题方法有时返回零。如果返回零,则手动拨打config[@"title"]
返回该值。因此,我已经调整了我的代码,如下所示:
NSDictionary *config = [mConfigManager currentConfig];
if ([config title]) {
return [config title];
}
else if(config[@"title"])
{
return config[@"title"];
}
return @"";
通过上面的代码,它总是返回标题(如果存在)。但它有时仅适用于else if
的情况,而不适用于类别版本。
所以,问题是:
为什么会当它做同样的事情手动调用的类没有返回值?
是什么让这个更奇怪的是它有时工作:请参阅下面的日志输出:
第一次点击
(lldb) po [config title]
Joe Bloggs
第二次点击
(lldb) po [config title]
nil
(lldb) po config[@"title"]
Joe Bloggs
注:上述日志都运行d通过选择表视图单元格触发应用程序的相同实例。因此,这消除了任何可能发生释放或重新分配的情况。
一两件事,但是我已经注意到了,就是控制台不会输出config
内容,而是返回了以下错误:
<object returned empty description>
变量视图但充分显示了对象和所有变量。该对象在变量列表中定义为NSDictionaryM
。
任何与此有关的帮助将大规模赞赏。
在此先感谢
用重命名你的方法前缀,看看你是否可以重现这一点。另外,'[mConfigManager currentConfig]'里面发生了什么? –
该行在返回'nil'时没有中断,因此它给人的印象是它没有被调用。 '[mConfigManager currentConfig]'只返回一个NSDictionary对象。 –