View加载后,IBOutlet UITableView为null

时间:2011-07-17 14:27:34

标签: iphone objective-c xcode cocoa-touch

这是基本代码(基于Xcode的标签应用模板)

ViewController.h

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic,retain) NSMutableArray *movies;
@property (nonatomic,retain) IBOutlet UITableView *tableView;

ViewController.m

@implementation ViewController
@synthesize movies,tableView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.title = NSLocalizedString(@"Watchlist", @"Watchlist");
        self.tabBarItem.image = [UIImage imageNamed:@"watchlist"];
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
     NSLog(@"tableView = %@", tableView);
}

输出

tableView = (null)

TableView连接到IB中的File所有者,class设置为ViewController

我真的不明白为什么tableView为null。 我不是Cocoa的新手(但是对于iPhone SDK),我用TableView dataSource创建了一个基于Single View的应用程序,看看我是否遗漏了一些东西。我让它在一分钟内完成了工作。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:8)

在界面构建器中,右键单击File's Owner并确保进行以下连接:

Outlets
tableView - Table View

Referencing Outlets
dateSource - Table View
delegate   - Table View

我怀疑你可能没有建立第一个连接?

答案 1 :(得分:1)

确保nib / xib包含在当前目标中。

我刚刚在Xcode5上使用iOS7 SDK遇到过这个问题。奇怪的是,我发现笔尖不再包含在我的目标中了。我不知道发生的时间和原因,但它有这种奇怪的副作用,大多数IBOutlets都没有正确设置,即使从代码到nib / xib的所有连接都很好。

例如:我的MKMapView *map位于viewDidLoad:的子视图列表中,但我的视图控制器中的IBOutlet MKMapView *map属性仍为 nil 。在我勾选了#34;包含在目标&#34;复选框,一切都按预期工作。