我是iOS菜鸟。 我遇到了类似的问题:
"self" object for UIViewcontroller has @"0 objects" in debug window in xcode
重新启动xcode无法解决问题。
我可以在主视图控制器的segue之后看到视图控制器中的self对象。我在该视图控制器中有一个UITableViewController,它有一个单独的类用于表的delagete /数据源。一旦我进入这个tableviewcontroller代码,self对象在调试器中显示“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 :(得分:0)
以下内容也适用于UITableViewControllers,请确保正确访问视图
对于viewController的“Self”不包含视图,你必须检查“self.view.subViews”,“Self.view.subViews”包含viewController的视图,而不仅仅是“self”。< / p>
例如,如果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的“self”不包含视图
而崩溃但是如果你尝试这个,那么你将有一些工作:
for (UIView *s in self.view.subviews) {
NSLog(@"%@", s);
}
这将登录到控制台中UIViewController中的所有视图,从而允许您访问视图
此外,您可能正在尝试访问“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 (id s in self.view.subviews) {
NSLog(@"%@", s);
}