Передача строки между представлениями: приложение вылетает - PullRequest
0 голосов
/ 20 октября 2011

В основном я создаю приложение, основным видом которого является MKMapView, в котором мне нужно показать некоторые аннотации (предприятий, школ и т. представление, UITableView, имеет категории, которые представляют аннотации на карте. Выбор некоторых категорий приведет к строке с их идентификаторами, и при нажатии кнопки «Назад» этот вид должен передать эту строку в MapView, где он получает объединяется с другой строкой, которая содержит другую часть «строки запроса», поэтому файл KML должен быть загружен и его аннотации должны быть просмотрены на карте. Есть проблема, все ячейки можно выбрать (отметить), но когда я нажимаю кнопку «Назад» на панели навигации, чтобы перейти к предыдущему представлению, приложение вылетает. Когда я не выбираю ни одну ячейку и нажимаю кнопку «Назад» приложение по-прежнему аварийно завершает работу, но в файле журнала оно сообщает, что строка, которую я передавал предыдущему представлению, равна nil. Я подготовил код для передачи параметра из одного представления в другое и не понимаю, что происходит неправильно .Я публикую код, относящийся только к передаче строки между представлениями.

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 ]

2 голосов
/ 20 октября 2011

Я полагаю, что авто-релиз дает проблему. Попробуйте вот так

NSMutableString *paramString2 = [[NSMutableString alloc] init];
1 голос
/ 20 октября 2011

Если вы используете авто-релиз , тогда вы должны выполнить назначение, как показано ниже: -

paramString = [paramString2 retain];

, а если вы не используете авто-релиз , вам следует использоватьследующее назначение, чтобы избежать утечек памяти.

paramString = [paramString2 copy];

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...