在视图之间传递字符串:app崩溃

时间:2011-10-20 12:03:21

标签: iphone ios crash

基本上我正在创建一个应用程序,主视图是MKMapView,我需要显示一些注释(商业,学校等)。注释来自我从网站“动态”检索的KML文件。第二个视图,一个UITableView,具有表示地图中注释的类别。某些类别的选择将导致带有其ID的字符串,并且当单击“后退”按钮时,此视图应将此字符串传递给MapView,在此处获取连接到另一个包含“查询字符串”的另一部分的字符串,因此应下载KML文件并在地图中查看其注释。 有一个问题,可以选择(选中)所有单元格,但是当我单击导航栏按钮'返回'转到上一个视图时,应用程序崩溃。当我没有选择任何单元格并单击后退按钮时,应用程序仍然崩溃,但在日志文件中它告诉我,我传递给上一个视图的字符串是nil.I准备了将参数从一个视图传递到另一个视图的代码,并且不明白出现了什么问题。我发布的代码只与视图之间传递字符串有关。

GisListViewController.m:

  - (void)tableView:(UITableView *)tableView
  didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);

[tableView deselectRowAtIndexPath:indexPath animated:YES];
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

if (cell.accessoryType == UITableViewCellAccessoryNone ) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} else if (cell.accessoryType == UITableViewCellAccessoryCheckmark ) {
    cell.accessoryType = UITableViewCellAccessoryNone;
}

NSMutableDictionary * myDictionary = [[NSMutableDictionary alloc] initWithCapacity:60];
int i = 0;
for (i = 0; i < [gisCategoryID count]; i++) {
    [myDictionary setObject:[gisCategoryList objectAtIndex:i] forKey:[gisCategoryID objectAtIndex:i]];
    NSMutableString *paramString2 = [[[NSMutableString alloc] init] autorelease];
    [paramString2 appendFormat:@"%@&", [myDictionary objectForKey:[gisCategoryID objectAtIndex:i]]];

    paramString = paramString2;
}

NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__);
}

 - (void) viewWillDisappear:(BOOL) animated
{
NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);

NSString *httpString = @"http://www.ikub.al/hartav2/handlers/kmlgenerator.ashx?layerid=";
NSString *finalkmlString = [ httpString stringByAppendingString:paramString ];

[[self delegate] setKmlString:finalkmlString];

NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__);
}

希望它有所帮助。

2 个答案:

答案 0 :(得分:2)

我猜Autorelease给出了问题。试试这个

NSMutableString *paramString2 = [[NSMutableString alloc] init];

答案 1 :(得分:1)

如果您正在使用自动释放,那么您应该执行如下所示的分配: -

paramString = [paramString2 retain];

如果您不使用autorelease ,那么您应该使用以下分配来避免内存泄漏。

paramString = [paramString2 copy];

希望这会有所帮助......