ios - 字符串的静态 NSArray - 如何/在哪里初始化 View Controller

在 Master-Detail 应用程序中,我想显示一个包含 5 个部分的 TableView,标题为:

  1. 你的行动
  2. 他们的行动
  3. 赢得比赛
  4. 输掉的比赛
  5. 选项

所以我在 Xcode 5.0.2 中创建了一个空白的 Master-Detail 应用程序,然后在它的 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 - 这不是在多线程应用程序中执行一次的运行时操作吗?这里是不是太过分了?我期待一个用于启动 const 数组的编译时解决方案...

viewDidLoad - 当我的应用程序在后台和前台之间切换时,是否不需要一次又一次地启动我的 const 数组?

我不应该更好地在 awakeFromNib 中设置 NSArray(因为我的所有 ViewControllers 都使用了 stroyboard 场景)?或者也许在 initSomething (是正确的方法 initWithStyle 吗?)

最佳答案

编写一个返回数组的类方法。

+ (NSArray *)titles
{
    static NSArray *_titles;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _titles = @[@"Your Move",
                    @"Their Move",
                    @"Won Games",
                    @"Lost Games",
                    @"Options"];
    });
    return _titles;
}

然后您可以在任何需要的地方访问它,如下所示:

NSArray *titles = [[self class] titles];

关于ios - 字符串的静态 NSArray - 如何/在哪里初始化 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20544616/

相关文章:

objective-c - 对 block 进行类型定义是如何工作的

objective-c - iOS:如何将 UIViewAnimationCurve 转换为 UIV

objective-c - 有没有一种简单的方法可以将 ISO8601 时间戳转换为格式化的 NSD

objective-c - [NSNull null] 和 nil 有什么区别?

objective-c - 在 Objective C 中使用 extern

ios - 使用 Storyboard 的条件转场

objective-c - 尝试标记应用程序图标,但未获得用户标记应用程序的权限 : iOS 8 X

ios - 使用自动布局,如何根据图像使 UIImageView 的大小动态变化?

iphone - 将 NSDictionary 保存到 NSUserDefaults

objective-c - 如何编写 OS X Finder 插件