NSDictionary出错

时间:2011-02-17 15:04:00

标签: iphone nsdictionary

我正在尝试从NSDictionary生成UIActionSheet。

codeCountryMap是.h文件中定义的NSDictionary变量。代码编译正确但在运行时崩溃。但是当在handleEvents方法

中完成初始化时,整个代码都有效
- (void)viewDidLoad {
   [super viewDidLoad];
    NSArray *codes = [NSArray arrayWithObjects:@"91", @"01", @"002", nil];
    NSArray *cName = [NSArray arrayWithObjects:@"ABC", @"QWE", @"XYZ", nil];
    codeCountryMap = [NSDictionary dictionaryWithObjects:codes forKeys:cName];
}

-(IBAction) handleEvents:(id)sender
{       
    UIActionSheet *displayCodeCountryMap = [[UIActionSheet alloc] initWithTitle:@"Select Country" delegate:self cancelButtonTitle:nil 
                                          destructiveButtonTitle:nil otherButtonTitles:nil,nil];

    for(id key in codeCountryMap) {
        [displayCodeCountryMap addButtonWithTitle:(NSString *)key];
    }

    [displayCodeCountryMap addButtonWithTitle:@"Cancel"];
    displayCodeCountryMap.cancelButtonIndex = [codeCountryMap count];
    displayCodeCountryMap.actionSheetStyle = UIActionSheetStyleBlackOpaque;
    [displayCodeCountryMap showInView:self.view];
    [displayCodeCountryMap release];
    [country resignFirstResponder];
}

调用handleEvents:方法时,应用程序崩溃。 任何形式的帮助都会受到极大的关注。

提前致谢。

2 个答案:

答案 0 :(得分:2)

这很可能是内存管理问题。看起来您正在将iVar codeCountryMap设置为NSDictionary的自动释放对象而不保留它(至少不在此代码段中)。这意味着当' handleEvents'方法被称为NSDictionary项已从内存中释放。

尝试保留NSDictionary项,或者,如果将codeCountryMap定义为保留属性,则使用以下代码进行设置。

self.codeContryMap = [NSDictionary dictionaryWithObjects:codes forKeys:cName];

这将使用合成方法设置属性并保留它。

答案 1 :(得分:0)

nil参数中不需要2 otherButtonTitles个终结符。如果你传入了字符串,则必须终止nil。既然你没有,那么nil就足够了。

UIActionSheet *displayCodeCountryMap = [[UIActionSheet alloc] initWithTitle:@"Select Country" delegate:self cancelButtonTitle:nil 
                                          destructiveButtonTitle:nil otherButtonTitles:nil];