0

我有一個自定義的UIView,MyView,它有幾個tableviews - tv1和tv2 - 都以編程方式添加。ViewController作爲自定義視圖的tableview的代表

我有一個自定義的UIViewController,MyController,它在loadView上創建MyView的一個實例。

我的目標如下。 myView應該是myView.tv1的數據源和委託,因爲它不會觸及我的數據模型並且是靜態的。

myController應該是myView.tv2的委託,因爲它的內容將取決於數據源。

我已加入下列到每個報頭:

@interface MyController : UIViewController <UITableViewDelegate, UITableViewDataSource> 

@interface MyView : UIView <UITableViewDelegate, UITableViewDataSource> 

,並添加到每個所要求的委託方法。

在MyView的的init,我再補充一點意見表中,並設置第一個自我的代表:

tv1 = [[UITableView alloc] initWithFrame:frame1 style:UITableViewStyleGrouped]; 
tv1.delegate = self; 
tv1.datasource = self; 

tv2 = [[UITableView alloc] initWithFrame:frame2 style:UITableViewStyleGrouped]; 

在我控制我連接了第二個實現代碼如下:

- (void)loadView{ 
self.view = [[MyView alloc] initWithFrame:myFrame]; 
[(MyView *)self.view tv2].delegate = self; 
[(MyView *)self.view tv2].dataSource = self; 
} 

當我運行這個時,我遇到了一大堆運行時錯誤。有時它會抱怨分頁控制,其他時候NSCFArray,其他時候根本沒有文字。它總是崩潰。

我確定它是設置導致問題的數據源而不是委託。如果我在laodView中註釋掉數據源行,它運行良好(但當然沒有內容)。

什麼可能導致我每次都遇到不同的運行時錯誤,以及我可能在哪裏出錯?

+1

通常(根據我的經驗)獲取各種崩潰錯誤消息與內存有關。你是否嘗試過評論其中一個表視圖的實現,並試圖讓他們每次工作1?如果你可以縮小到哪個tableview(或者兩者)是問題,那將有助於解決問題。 – WendiKidd

+0

要補充@WendiKidd的評論,請查看運行靜態分析器是否有幫助。 – Danra

+0

謝謝 - 我看到很多「[ numberOfSectionsInTableView:]:無法識別的選擇器發送」消息,其中空白是__NSCFType,NCSFArray等我不知道從哪裏開始,因爲我使用ARC。 –

回答

0

MyView的應該是myView.tv1數據源和委託,因爲它 不碰我的數據模型,並是靜態

這不是一個真正的MVC,對不對?

如果您爲每個表格準備單獨的組合代理&數據源類,我認爲您可以更快地跟蹤問題(或容易避免它)。 table1數據源可能是內部類MyView

保持表所有者保留委託/數據源引用至關重要,因爲表不會自己保留它(對於將代表/數據源設置爲self的情況,對於表1而言可能並不那麼重要MyView)和table2(MyController),但是如果您創建單獨的代理&數據源類,則需要牢記這一點)。無論如何,您需要保留您用作數據源的array

+0

謝謝 - 我將如何保留tableview?我正在使用ARC。至於MVC,這是我單獨管理tv2的委託/數據源的主要原因。 tv1只是簡單地更新它在相同View中的按鈕顯示方式,不參考任何數據對象等等 - 無論我將哪個控制器連接到視圖,這些代碼總是相同的,那麼爲什麼控制器必須承擔責任它? –

+0

我沒有使用ARC,但它必須是'strong'的參數,您需要讓ARC獲取屬性所有權(@property(strong,nonatomic)NSObject * myString;)。至於'table1'委託,我並不是指它在MyController中甚至被提及,你可以聲明它的接口並將它的實現寫在'MyView.m'上,在那裏創建它的實例,保留它並設置爲'table1'的代表。 'table1'的初始化可能會封裝在'MyView.h'聲明的'MyView'方法中,這樣'MyController'就不會了解它的委託。 –

+0

我們可能已經跨越了電線--tv1完全按照您的建議在MyView內部構建和控制。 MyController只具備tv2的知識。我目前沒有使用屬性來定義電視2。 –