从另一个类访问字符串

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;

【讨论】:

以上是关于从另一个类访问字符串的主要内容,如果未能解决你的问题,请参考以下文章

从另一个表单访问字符串

如何从另一个类中获取字符串变量

从另一个类访问 IBOutlet

Kivy:无法从另一个类更新文本输入值

从另一个类(java、javafx)调用对象

从另一个类访问 TextView