Objective C - 在创建字符串数组时应用程序崩溃,我疯了吗?

时间:2009-10-04 11:16:23

标签: iphone objective-c cocoa cocoa-touch

如果我尝试使用这个简单的代码:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    // Add the tab bar controller's current view as a subview of the window
    [window addSubview:tabBarController.view];

    NSString *stringMer = [NSString stringWithFormat:@"OK COOL"] ;
    NSString *stringMer2 = [NSString stringWithFormat:@"OK COOL"];

    NSArray *truc = [NSArray arrayWithObjects:stringMer,stringMer2];
}

我的应用程序崩溃(“无法读取未知加载命令0x22”或只是常规崩溃)... applicationDidFinishLaunching来自我的FooAppDelegate,我没有更多代码,这是正常的吗?

3 个答案:

答案 0 :(得分:37)

传递给arrayWithObjects:方法的参数列表必须为nil - 已终止:

NSArray *truc = [NSArray arrayWithObjects:stringMer,stringMer2, nil];

答案 1 :(得分:9)

不要使用+ stringWithFormat:除非你实际上有一个需要解析的格式字符串。

答案 2 :(得分:2)

NSResponder是对的 - 不要通过默认为stringWithFormat而马虎。 Perspx还指出了一个相当明显(但很容易被遗忘)错误的缺失nil。

我会更明确一点 -

(在.h中)

NSArray *truc; (assuming it won't be a property)

(在.m中)

//actually, I'd define, "OK COOL" as a string and init with that, but...
    NSString *stringMer = [[NSString alloc] initWithString:@"OK COOL"] ;
    NSString *stringMer2 = [[NSString alloc] initWithString:@"OK COOL"]; 


    truc = [[NSArray alloc] initWithObjects:stringMer,stringMer2, nil];

//appease the memory gods
    [stringMer release];
    [stringMer2 release];

(然后,dealloc)

[truc release];

熟悉乐器会很好 - 运行Leaks。