2013-01-15 40 views
-1
UIImage * imageSetting= [UIImage imageNamed:@"setting-button"]; 
UIImageView * imageView = [[UIImageView alloc]initWithImage:imageSetting]; 
self.editSettings = [[UIBarButtonItem alloc]initWithCustomView:imageView]; 
PO(self.editSettings); 

另外:這段代碼有什麼問題我無法創建簡單的UIBarButtonItem?

self.editSettings = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonItemStylePlain target:nil action:nil]; 
PO(self.editSettings); 

在這兩種情況下self.editSettings返回null。

所以,PO(self.editSettings)返回NULL

+0

不能看到你在任何地方添加按鈕(?) –

+0

您是否收到任何錯誤?該視圖是否使用「接口」構建器創建的?在將新的實例分配給視圖後,是否將editSettings添加到視圖中? – CStreel

+0

我忘了提及self.editSettings爲空。這就是我知道事情出錯的原因。 –

回答

1

你不會在這個問題表現出這一點,但這種行爲可以通過editSettings作爲一個軟弱特性來解釋。如果您從初始化直接分配給弱屬性,ARC將刪除該對象,因爲沒有強指針指向該對象。

要麼使用一個局部變量來創建欄按鈕項目,然後確保你它的屬性添加到工具欄或導航欄它超出範圍之前,或更改到強。

+0

賓果這就是問題 –

1

難道是因爲這個?:

[UIImage imageNamed:@"settings-button"]; 

你(出於某種原因)不指定文件擴展名。 (.png最有可能)*。 如果文件「設置鍵」不存在,該的UIImage * imageSettings將是零。

這又使initWithImage:失敗(因爲沒有圖像),最後initWithCustomView:零也將返回零...

編輯: *正如馬丁指出下面的擴展名是不必要的,如果它是png所以我的答案是正確的它要麼是在實際文件名或其他文件類型比png格式錯字。

+1

作爲的iOS4的,它上面是沒有必要的,包括擴展名。 – Martin

+0

不知道。那麼如果你有一個相同名字的jpg和png,那麼編譯器如何處理呢? –

+0

好吧,我不完全正確。下面是從文檔'特別注意事項 在iOS 4和更高版本的參考,如果該文件是PNG格式,無需指定。PNG文件擴展名。在iOS 4之前,您必須指定文件擴展名 – Martin