因此,我在Xcode 5.0.2中创建了一个空白的主从应用程序,然后在其MasterViewController.m中(它是一个UITableViewController),我尝试实现以下方法:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return _titles[section];
}
我的问题是如何初始化NSArray _titles?在MasterViewController.m文件中尝试:#import "MasterViewController.h"
#import "DetailViewController.h"
static NSArray *_titles_1 = @[
@"Your Move",
@"Their Move",
@"Won Games",
@"Lost Games",
@"Options"
];
@interface MasterViewController () {
NSMutableArray *_games;
NSArray *_titles_2 = @[
@"Your Move",
@"Their Move",
@"Won Games",
@"Lost Games",
@"Options"
];
}
@end
@implementation MasterViewController
- (void)awakeFromNib
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
self.clearsSelectionOnViewWillAppear = NO;
self.preferredContentSize = CGSizeMake(320.0, 600.0);
}
[super awakeFromNib];
}
- (void)viewDidLoad
{
....
}
但是上面两种尝试都给了我语法错误:
更新:
让我惊讶的是,针对这个简单的问题有很多建议,但作为一个iOS/Objective-C新手,我不确定哪种解决方案最合适。
dispatch_once
-它不是在多线程应用程序中执行某些操作一次的运行时操作吗?这不会过度杀伤性能吗?我期望找到一个编译时解决方案来初始化常量数组...
viewDidLoad
-当我的应用程序在后台和前台之间切换时,它不会无休止地反复初始化我的常量数组吗?
我应该在awakeFromNib
中设置NSArray
(因为我对所有的ViewControllers都使用stroyboard场景)?或者是在initSomething
中(正确的方法是initWithStyle
吗?)
viewDidLoad
中初始化它。 - duci9ystatic NSArray* const
。如下面的答案所示,有许多解决初始化数组的方法。我喜欢懒加载,但它并不适用于这种情况。 - Hugo Tuniusdispatch_once
或某种形式的锁定。我可以亲身经历告诉你,否则崩溃错误的潜在风险非常真实。 - jlehr