2015-08-08 47 views
0

我是iOS新手。 我有一個類似的問題:在調試器中顯示「0個對象」

"self" object for UIViewcontroller has @"0 objects" in debug window in xcode

重新啓動的Xcode不解決問題。

從我的主視圖控制器中,我可以在視圖控制器中看到自對象。我有一個UITableViewController裏面的視圖控制器,爲表的delagete /數據源一個單獨的類。一旦我進入這個tableviewcontroller代碼,自我對象在調試器中顯示「0對象」。我相信我正在初始化表視圖不正確,以某種方式導致此問題,但不太確定如何。

感謝您的幫助。我的代碼如下。

@implementation ConnectTableController 

    @synthesize perpArray; 
    @synthesize nameArray; 

    + (ConnectTableController *)connectTableController 
    { 
     return [[ConnectTableController alloc] init]; 
    } 


    - (void)viewDidLoad { 

     [super viewDidLoad]; 

     perpArray = [[NSMutableArray alloc] init]; 
     nameArray = [[NSMutableArray alloc] init]; 

    } 

.... 



@interface ConnectTableController : UITableViewController <UITableViewDelegate, UITableViewDataSource> { 

    UITableView *tableView; 
    NSMutableArray* perpArray; 
    NSMutableArray* nameArray; 
} 


+ (ConnectTableController*) connectTableController; 


@property (nonatomic, strong) NSMutableArray *perpArray; 
@property (nonatomic, strong) NSMutableArray *nameArray; 

... 


// Parent view controller code 


    @implementation ConnectVC 


    - (void)viewDidLoad { 

     [super viewDidLoad]; 

     // Set the controller delegate/dataSource for the Table 
     connectTableController = [[ConnectTableController alloc] init]; 
     connectTable.dataSource = connectTableController; 
     connectTable.delegate = connectTableController; 

     [self addChildViewController:connectTableController]; 

    } 
... 


    @interface ConnectVC : UIViewController{ 


     IBOutlet UIButton *CONNECT; 

     ConnectTableController *connectTableController; 
     IBOutlet UITableView *connectTable; 
    } 
+0

難道是數據源 – user210504

+0

檢查,如果你給數據源的數量。如果是這樣,請通過NSLog進行調試。即使有時它給出0個對象,但它在NSLog中提供了正確的信息 – Chintan

+0

我認爲在父視圖控制器的這一行上設置數據源可以做到這一點: connectTable.dataSource = connectTableController; 這樣還不夠嗎?那麼,只需要NSLog(tableView.datasource)進一步調試? – zgb

回答

0

以下適用於UITableViewControllers還有,請確保您正在訪問的觀點正確

「自我」爲的viewController不包含的觀點,你必須檢查「self.view.subViews 「,」Self.view.subViews「包含viewController的視圖,而不僅僅是」self「。

例如,如果自我是一個UIViewController那麼下面會崩潰您的應用程序與相應的錯誤:

for(UIView * a in self) 
{ 
    NSLog(@"%@", a.description); 
} 

error: 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x7f854176fbf0' 

它崩潰,因爲UIViewController中的「自我」不包含的觀點

BUT如果你嘗試這樣做,那麼你將有一些工作:

for (UIView *s in self.view.subviews) { 
    NSLog(@"%@", s); 
} 

這將記錄到控制UIViewController中的所有視圖,從而allowi你訪問視圖

此外,它看起來像你可能試圖訪問「connectTableController」的意見。要訪問此控制器的視圖,請按以下方式操作:

connectTableController.view.subViews。

UITableViewController * aaa = [UITableViewController new]; 
aaa.tableView; 
aaa.view; 
aaa.view.subviews; 

因此,這意味着你要訪問以下內容:

connectTableController.tableView 
connectTableController.view.subViews 

,然後從那裏,你可以這樣做:

connectTableController.tableView.subViews 

..那是當然的,如果你正在尋找的子視圖是UITableViewController的tableView的子視圖

此外,我認爲你的方式UITableViewController的位置是OKAY,但可能不是最好的選擇,只是因爲它有點複雜,並不像將它添加爲像這樣的子項那麼容易,以使其工作。您應該使用這樣的事:

tester2 = [UITableViewController new]; 
    [self addChildViewController:tester2]; 
    [self.view addSubview:tester2.view]; 
    [tester2 didMoveToParentViewController:self]; 

那麼你當然應該結合這個方法時,/如果你想刪除的子視圖控制器

- (void)hideContentController:(UIViewController*) content 
{ 
    [content willMoveToParentViewController:nil]; 
    [content.view removeFromSuperview]; 
    [content removeFromParentViewController]; 
} 

這將有望給您一個開始,所以也試試這個:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Set the controller delegate/dataSource for the Table 
    connectTableController = [[ConnectTableController alloc] init]; 
    connectTable.dataSource = connectTableController; 
    connectTable.delegate = connectTableController; 
    [self addChildViewController:connectTableController]; 
    [self.view addSubview:connectTableController.view]; 
    [connectTableController didMoveToParentViewController:self]; 
} 

而且,我不知道你需要做的代表團聲明任何事情,因爲孩子視圖控制器基本上是一個世界中它自己的小世界。使用和不使用這些行試試:

connectTable.dataSource = connectTableController; 
    connectTable.delegate = connectTableController; 

我的意思,可能是在的UITableViewController實例聲明這些或確保你所添加的「connectTable到了的UITableViewController,像這樣:

cconnectTableController.tableView = connectTable; 

[cconnectTableController setTableView:connectTable]; 

,那麼你可以試試這個

connectTable.dataSource = cconnectTableController; 

等,等

試試這個for循環,並列出結果

for (id s in self.view.subviews) { 
    NSLog(@"%@", s); 
} 
+0

讓我更快地研究你的解決方案,一秒鐘,再次檢查我發佈的解決方案,我會爲你提供更多信息,不一定是每個解決方案的解決方案,但可能有些東西可能會導致您的問題 – Loxx

+0

除此之外,這是從forloop打印的內容: VIEW: zgb

+0

我相信TableView正在創建好,它的我的tableview控制器,我沒有正確實例化。 – zgb

相關問題