Iphone 使用NSDictionary时出错
我正在尝试从NSDictionary生成UIActionSheet codeCountryMap是在.h文件中定义的NSDictionary变量。代码编译正确,但在运行时崩溃。但是当初始化在handleEvents方法中完成时,整个代码都可以工作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
- (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),因此它不会被保留。非常感谢……它工作了。。。。我会在将来记住这一点。。。又来了