2012-12-20 74 views
1

我有一個自定義委託和數據源。但是當我嘗試初始化它時,我遇到了一些問題。在我的.h文件中,如果有這樣的話。問題與自定義代理和數據源

@property (nonatomic, assign) id<UITableViewDelegate> delegate; 
@property (nonatomic, assign) id<KalDataSource> dataSource; 

這樣做的結果是,在.m文件中的合成中,我得到以下錯誤。

Existing ivar 'dataSource' for property 'dataSource' with assign attribute must be __unsafe_unretained. 

經過一些谷歌搜索魔術後,我發現我應該嘲笑我這樣的變量。

@property (nonatomic, strong) id<UITableViewDelegate> delegate; 
@property (nonatomic, strong) id<KalDataSource> dataSource; 

但後來我得到這個錯誤。

linker command failed with exit code 1 (use -v to see invocation) 

有人可以幫我嗎?

親切的問候!

回答

0

代表通常是weak的參考文獻。

使用委託的對象不擁有它。 這只是對可能或無法響應的對象的引用。弱說,如果對象的真正所有者釋放它,它應該被釋放。 弱引用然後自動設置爲nil,你沒有得到任何殭屍。

二,問題是,您已經擁有名爲dataSource的屬性。


編輯

我以前對重複屬性語句被證明是錯誤的。 您應該覆蓋設置程序&獲取程序,包括.h中的聲明和.m文件中的實現。

+0

當我使用@dynamic時,仍然出現鏈接錯誤。 – Steaphann

+0

@StefGeelen你能發佈整個錯誤信息嗎? – NSAddict

+0

重複的符號_KalDataSourceChangedNotification在: /Users/geelenstef/Library/Developer/Xcode/DerivedData/Offitel-cpxhgfgbmhddbwbpmyjydsswuygz/Build/Intermediates/Offitel.build/Debug-iphonesimulator/Offitel.build/Objects-normal/i386/AgendaViewController.o /Users/geelenstef/Library/Developer/Xcode/DerivedData/Offitel-cpxhgfgbmhddbwbpmyjydsswuygz/Build/Intermediates/Offitel.build/Debug-iphonesimulator/Offitel.build/Objects-normal/i386/KalViewController.o ld:1個體繫結構的重複符號i386 clang:錯誤:鏈接器命令失敗,退出代碼1(使用-v查看調用) – Steaphann

1

您遇到的錯誤與您的內存限定符無關(他們第一次是正確的)。問題在於你已經在沒有限定符的地方宣佈了支持iVar的事實。當宣佈iVars時,它們隱含的強大,所以如果你去看你的影子iVars,並且預先__weak__unsafe_unretained,警告應該消失。當然,更好的解決方案是完全刪除你的支持iVar,因爲Xcode會爲你合成它們。

+0

@codiFi我通過刪除KalViewController.h和.m來修復它,但是你能否解釋一下你的答案,以便我明白這個問題。 – Steaphann

+0

@StefGeelen我盡我所能解釋了它。什麼特別令你煩惱? – CodaFi

+0

好吧我認爲你的意思是支持iVars是變量分配爲'id'如果你有兩次相同的變量聲明的類型id,Xcode開始抱怨?它是否正確 ? – Steaphann