最近我的代碼中出現了一些意外的編譯錯誤,我感到非常困惑。我做了一些故障排除,我想出了這個位的測試代碼:performSelector的結果:與標準點符號調用不同?
1 float performSelectorResult, messageResult;
2 SEL selector = @selector(smallContentCellMargin);
3
4 NSLog (@"selector %s result %f", selector, [defaults performSelector:selector]);
5 NSLog (@"message result is %f", defaults.smallContentCellMargin);
6
7 performSelectorResult = [defaults performSelector:selector];
8 messageResult = defaults.smallContentCellMargin;
如果我運行的代碼,是,我得到第7行編譯錯誤:「不兼容的類型分配」。但是,如果我註釋掉第7行代碼的構建和運行,在NSLog的結果是:
2009-07-21 18:31:44.823 ICE[24347:20b] selector smallContentCellMargin result 0.000000
2009-07-21 18:31:44.830 ICE[24347:20b] message result is 7.000000
我已經使用非常相似的代碼來檢索一個UIFont,但從來沒有一個浮點數。有什麼我不知道的,或者這是Objective-C中的錯誤嗎?我很困惑。
我嘗試了-valueForKey的快速測試:'float quickTest = [defaults valueForKey:@「smallContentCellMargin」];'當我嘗試編譯代碼時,出現「初始化中的不兼容類型」錯誤。我在文檔中查找了-valueForKey,並且它說它返回類型(id) - 我做錯了什麼,或者在這種情況下是否與-performSelector相同? – JoBu1324 2009-07-22 03:04:13