从另一个类访问字符串
Posted
技术标签:
【中文标题】从另一个类访问字符串【英文标题】:Accessing NSStrings from other classes 【发布时间】:2012-11-11 20:08:58 【问题描述】:希望你能帮我解决我的实际问题:
我已经建立了一个带有导航控制器的新项目。对于项目的表格视图,我为其添加了一个新类,名为“TableViewController.h”和“TableViewController.m”。
在这个类中,我在 .h 中声明了一个 NSString 的属性,以便从其他类访问它,如下所示:
@property (strong, nonatomic) NSString *testString;
在 .m 中,我将其合成如下:
@synthesize testString;
现在我在表视图控制器的 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath-Method 中设置如下:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
testString = @"Hello, World!";
现在为下一个视图创建了一个新的 UIViewController 类,当我点击一个单元格时它应该出现(到目前为止一切正常)。在这个名为“SecondView”的 UIViewController 中,我导入了 TableViewController 的 .h 文件。 此外,我在 SecondView.m 中有此代码:
-(void) viewDidLoad
[super viewDidLoad];
TableViewController *demoObject = [TableViewController alloc] init]
NSLog (@"Teststring is: %@" [demoObject.testString]);
现在,当我启动模拟器时,我得到以下输出: 测试字符串为:(null)
当我在 TableViewController 中对 testString 进行 NSLog 记录时,我得到“Hello, World”,但为什么它没有“转移”到 SecondView 类并生成所需的输出?
【问题讨论】:
请尝试理解面向对象的编程。执行[[TableViewController alloc] init]
会创建该类的一个新实例,该实例与您之前创建的该类的任何其他实例完全不同。因此,以前创建的实例中设置的任何值都无法从新实例中访问。
天哪,你说的太对了!这是朝着正确方向迈出的一步,谢谢!
【参考方案1】:
您正在将字符串记录在viewDidLoad
中,该字符串在表视图的didSelectRow
方法中设置之前很久就被调用。你也应该使用self.testString = ...
【讨论】:
+1。这。您创建表然后立即记录字符串。用户如何在视图加载之前选择一个单元格并将字符串设置为某个值? xD ...我认为问题在于他的写作方式令人困惑。 :p @Metabble:他的写作方式反映了他自己的困惑。 (这很常见,寻找它是看穿真正问题的好方法。) @Peter Hosey 这可能很常见,但我发现这篇特别的帖子很难理解。可能是因为我累了。【参考方案2】:您希望数据如何“传输”?您必须 通过 .. 在 tableView:didSelectCellAt:row (您推送第二个视图的位置)中,您必须说:
2ndView.testString = self.testString;
【讨论】:
以上是关于从另一个类访问字符串的主要内容,如果未能解决你的问题,请参考以下文章