我有一個很奇怪的問題,我似乎無法看到原因。類別擴展不一致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對象。 –