2011-10-19 16 views
0

我試圖讓這個工作,讓我解釋什麼即時嘗試做,然後我會顯示一些代碼。好吧,我有一個導航控制器的UITableView,當你選擇一行時,它會加載一個詳細視圖。NSString不會通過類之間

我已經做了一個字符串,將攜帶哪些行被選中,所以我可以知道什麼顯示在視圖上。字符串不會在這兩個類之間傳遞,只是出現null,即使當我嘗試NSLog字符串在同一類中的另一個方法它仍然會出現null,唯一的地方,它會實際顯示它裏面是什麼它創建的方法。

讓我告訴你一些代碼,我將嘗試不同的方法來做到這一點,並且都推出了零 第一class.h

@interface features : UITableViewController{ 

NSMutableArray *featuresTableViewSet; 

NSString *selectedFeature; 
} 

@property (nonatomic, retain) NSMutableArray *featuresTableViewSet; 
@property (nonatomic, retain) NSString *selectedFeature; 

-(NSString *)get; 
@end 

第一class.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
selectedFeature = [[NSString alloc]init]; 
selectedFeature = [featuresTableViewSet objectAtIndex:indexPath.row]; 


// Navigation logic may go here. Create and push another view controller. 

features_detail *detailViewController = [[features_detail alloc]  initWithNibName:@"features_detail" bundle:nil]; 
// ... 
// Pass the selected object to the new view controller. 
[self.navigationController pushViewController:detailViewController animated:YES]; 



} 

-(NSString *)get{ 
NSLog(@"%@", selectedFeature); 
return selectedFeature; 
} 

現在這裏是類im試圖使用字符串

i #import "features.h"第一類到第二個

這裏是第二類

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view from its nib. 

features *selected = [[features alloc]init]; 

self.title = selected.selectedFeature; 

NSLog(@"%@", [selected get]); 

NSLog(@"%@", selected.selectedFeature); 
} 

一兩件事情Im做的應該工作權.M?

謝謝:)

回答

2

哦,不,這不會起作用。你應該在詳細視圖類的.h文件中創建的NSString屬性:

@interface features_detail : <bla-blaController> { 

NSString *selectedFeature; 

} 

@property (nonatomic, retain) NSString *selectedFeature; 

在創建detailViewController例如,你可以與他們更看重你從表中得到初始化這個屬性,然後按下控制器:

features_detail *detailViewController = [[features_detail alloc]  initWithNibName:@"features_detail" bundle:nil]; 
//pass it like this: 
detailViewController.selectedString = selectedFeature; 

[self.navigationController pushViewController:detailViewController animated:YES]; 

// Now don't forget to release the controller you've pushed: 
[detailViewController release]; 

//Oh, and you need to release the string as well: 
[selectedFeature release]; 

這將有助於避免由於未釋放對象而導致的內存泄漏。順便說一句,你不需要這裏的get方法。

+0

你是個天才。完美的作品現在謝謝! – Jacob

1

在viewDidLoad中()方法,features_detail類創建功能類的全新實例。全新實例將具有其selectedFeature字段初始值;它不會包含您在點擊表格行時設置的值。

這是一個替代方案,讓features_detail類有一個名爲selectedFeature的字段。在didSelectRowAtIndexPath方法中創建了features_detail類的實例後,將selectedFeature傳遞給此實例。

它看起來是這樣的:

detailViewController.selectedFeature = selectedFeature; 

這樣,你通過什麼從功能類的features_detail類選擇。 (另外,在解決主要問題後,我們可以解決代碼中的一些內存管理問題)

0

在appdelegate類中創建nsstring對象,並在appdelegate和declare屬性中分配這個對象。你可以在整個項目中使用該字符串,在那裏你首先使用那個字符串作爲appdelegate類的對象,然後你可以使用它。