我试图让这个工作,让我解释我想做什么,然后我会显示一些代码。好吧,所以我有一个带导航控制器的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);
}
我正在做的两件事之一应该正常工作吗?
谢谢:)
答案 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>