[英]NSDictionary initialization results in “EXC_BAD_ACCESS”
我無法弄清楚為什么這段代碼很糟糕。 我認為在dictionaryWithObjectsAndKeys中使用靜態字符串是可以的,但它在運行時因EXC_BAD_ACCESS而失敗。 我使用調試器來識別它在定義行中實際上是失敗的。 它永遠不會輸出“Made it here”。
- (NSString *)polyName:(NSUInteger)vertices {
NSLog(@"looking for polyName with %d vertices.", vertices);
NSDictionary *polNameDict = [NSDictionary dictionaryWithObjectsAndKeys:
@"triangle", @"3",
@"square", @"4",
@"pentagon","5",
@"Hexagon", @"6",
@"Heptagon", @"7",
@"Octagon", @"8",
@"Nonagon", @"9",
@"Decagon", @"10",
@"Hendecagon", @"11",
@"Dodecagon", @"12",
nil];
NSLog(@"Made it here");
NSString *key = [NSString stringWithFormat: @"%d", vertices];
NSString *polName = [polNameDict objectForKey:key];
return (polName);
// Memory management: No need to release polNameDict, key, polName because they use
// convenience functions
}
問題出在這里:
@"pentagon","5"
它需要一個對象(NSString),而是有一個常規字符串。
將其更改為:
@"pentagon", @"5"
EXC_BAD_ACCESS出現在哪一行? 利用斷點告訴我們。
現在,如果我是你,我會做這樣的事情:
NSDictionary *polNameDict = [[NSDictionary alloc] initWithObjectsAndKeys:
@"triangle", @"3",
@"square", @"4",
@"pentagon",@"5",
@"Hexagon", @"6",
@"Heptagon", @"7",
@"Octagon", @"8",
@"Nonagon", @"9",
@"Decagon", @"10",
@"Hendecagon", @"11",
@"Dodecagon", @"12",
nil];
而不是你現在如何擁有它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.