2010-07-10 79 views
0

我是新来的目标c,我想它与我不理解指针或什么,但我不能访问一个变量之外的类声明。如何从外部类访问属于一个类的变量?

我知道这是一个荒谬的问题,但我需要帮助。

我有一个简单的NSString,它取决于选择哪个表格行,它抓住名称并将其存储在字符串中。事情是,我需要这个字符串在另一个需要使用String值加载文件的类中。我只是得到一个字符串是零或无任何错误。

我已经尝试过属性,综合,导入,@class,但我想我不知道这些东西的真正含义是什么。

请指点我正确的方向。


在libraryTableViewController我在.M申报

NSString *fileToLoad; 
@property (nonatomic, retain) NSString *fileToLoad; 

@synthesize fileToLoad;然后在didSelectRowAtIndexPath方法我fileToLoad = @"%@", [categories objectAtIndex:row];

的问题是在另一个视图控制器类我想从tableViewData plist中加载

NSString *myFile = [[NSBundle mainBundle] pathForResource:fileToLoad ofType:@"plist"]; 

但只是得到零; ?

+3

下一次更新你的问题,评论中的代码只是不可读的;) – 2010-07-10 08:04:04

回答

4

如果代码是在另一个类或实例,你没有其他类别的类似命名的属性魔法访问/ instances - 有关declared properties的文档可能有助于消除误解。
在你的第二个例子中,fileToLoad可能是nil,因为它从未在那里初始化。

你需要有你想拥有的价值和检索属性值的实例的引用:

NSString *myFileToLoad = myTableViewController.fileToLoad; 

根据您的架构有可能还存在其他/更好的解决方案。

+0

如果我在类中声明了一个myTableViewController,然后尝试在另一个中使用它,我只会得到相同的错误。 – jarryd 2010-07-10 13:11:15

+0

@alj:你首先必须给它赋值当然。 – 2010-07-10 14:04:18

+0

Nah,我的意思是,我得到myViewController的未声明错误,就像我对myFileToLoad所做的那样。 – jarryd 2010-07-10 14:14:55

1

只是一对夫妇对你的代码点:

  1. 你宣布一个NSString变量来使用retain内存管理特性。具有可变/不可变类型的类簇的正确内存管理模型是copy
  2. 即使您已声明fileToLoad作为属性,您仍将其直接设置为didSelectRowAtIndex方法,该方法绕过内存管理和任何KVO/KVC通知可能会改变属性。除了初始化或拆除方法外,您应该使用self.fileToLoad更改属性值。
+0

谢谢。但请,我疯了。你将如何获取选定的tablecell.text,并在另一个类中使用该文本来加载具有该名称的plist?我仍然无法工作。 – jarryd 2010-07-10 13:30:05