NSString不会在类之间传递

时间:2011-10-19 04:19:28

标签: iphone objective-c ios view

我试图让这个工作,让我解释我想做什么,然后我会显示一些代码。好吧,所以我有一个带导航控制器的UITableView,当你选择一行时,它会加载一个细节视图。

我已经创建了一个字符串,它将携带选择的行,因此我可以知道在视图上显示的内容。字符串不会在这两个类之间传递,只是提出null,即使我尝试NSLog字符串在同一个类中的另一个方法中它仍然会出现null,它实际上显示它内部的唯一地方是它创建的方法。

让我向您展示一些代码,我正在尝试以不同的方式来实现它,并且两者都是null 第一课。

@interface features : UITableViewController{

NSMutableArray *featuresTableViewSet;

NSString *selectedFeature;
}

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

-(NSString *)get;
@end

first 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;
}

现在这是我试图在

中使用字符串的类

#import "features.h"第一个班级进入第二个班级

这是第二类的.m

- (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);
}  

我正在做的两件事之一应该正常工作吗?

谢谢:)

3 个答案:

答案 0 :(得分: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方法。

答案 1 :(得分:1)

在viewDidLoad()方法中,features_detail类正在创建要素类的全新实例。全新的实例将其selectedFeature字段初始化;它不包含您在单击表行时设置的值。

这是一个替代方法,让features_detail类有一个名为selectedFeature的字段。在didSelectRowAtIndexPath方法中创建features_detail类的实例后,将selectedFeature传递给此实例。

它看起来像:

detailViewController.selectedFeature = selectedFeature;

这样,您将从要素类中选择的内容传递给features_detail类。 (另外,在解决主要问题后,我们可以解决您的代码中的一些内存管理问题)

答案 2 :(得分:0)

在appdelegate类中创建nsstring对象并在appdelegate中分配它并声明属性。你可以在整个项目中使用该字符串,你想在那里使用该字符串,首先你可以使用appdelegate类的对象。< / p>