2011-10-20 106 views
0

基本上,我創建的應用程序的主視圖是MKMapView,我需要顯示一些註釋(企業,學校等)註釋來自KML文件,我'檢索'動態'。第二個視圖是一個UITableView,它具有表示地圖中註釋的類別。選擇某些類別會導致帶有ID的字符串,並且當單擊後退按鈕時,該視圖應該傳遞該字符串到MapView,它被連接到另一個包含「查詢字符串」另一部分的字符串,因此應下載KML文件並在地圖中查看其註釋。 存在問題,可以選中(選中)所有單元格,但是當單擊導航欄按鈕'返回'以轉到上一個視圖時,應用程序崩潰。當我沒有選擇任何單元格並單擊後退按鈕,該應用程序仍然崩潰,但在日誌文件中它告訴我,我傳遞給前一個視圖的字符串是nil.I準備了用於將參數從一個視圖傳遞到另一個視圖的代碼,並且不明白將要發生的事情wrong.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

我想自動釋放給problem.Try這樣

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

謝謝!它工作完美!現在它不再崩潰了。 – Hari

1

如果您使用自動釋放,那麼你應該做的任務,如下圖所示: -

paramString = [paramString2 retain]; 

,如果你是不使用autorelease那麼你應該使用下面的分配來避免內存泄漏。

paramString = [paramString2 copy]; 

希望這有助於...

+0

謝謝,我沒有測試這個,但它應該工作。不過,自從我實施第一個以來,我接受了這個正確答案。 – Hari

相關問題