Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用NSDictionary时出错_Iphone_Nsdictionary - Fatal编程技术网

Iphone 使用NSDictionary时出错

Iphone 使用NSDictionary时出错,iphone,nsdictionary,Iphone,Nsdictionary,我正在尝试从NSDictionary生成UIActionSheet codeCountryMap是在.h文件中定义的NSDictionary变量。代码编译正确,但在运行时崩溃。但是当初始化在handleEvents方法中完成时,整个代码都可以工作 - (void)viewDidLoad { [super viewDidLoad]; NSArray *codes = [NSArray arrayWithObjects:@"91", @"01", @"002", nil]; N

我正在尝试从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:方法时,应用程序崩溃。 任何形式的帮助都将受到极大的感谢


提前感谢。

这很可能是内存管理问题。看起来您正在将iVar codeCountryMap设置为NSDictionary的自动删除对象,但没有保留它(至少在本代码段中没有)。这意味着当调用“handleEvents”方法时,NSDictionary项已从内存中释放

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

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

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

otherbuttonitles
参数中不需要2个
nil
s终止符。如果您传入了字符串,那么它必须以零结尾。既然没有,一个
nil
就足够了

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

你犯了什么错误?它发生在哪一行?这是一个运行时错误。。。。。。。。。。在调用handleEvents方法时发生。我也更新了这个问题,我已经使用了@property(非原子,retain)NSDictionary codeCountryMap;在my.h文件中设置reatin属性,并在.m文件中合成该属性。您是否将代码更改为使用self.codeCountryMap而不仅仅是codeCountryMap?当您不使用“self.[var]”时,它不会使用属性方法来设置变量(您直接设置iVar),因此它不会被保留。非常感谢……它工作了。。。。我会在将来记住这一点。。。又来了