如何从外部类访问属于一个类的变量?

时间:2010-07-10 07:45:27

标签: objective-c properties

我是目标c的新手,我想这与我不理解指针或其他东西有关,但我无法访问声明它的类之外的变量。

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

我有一些像NSString一样简单的东西,根据选择的哪个表格单元行,它会抓取名称并将其存储在字符串中。问题是,我需要在另一个类中使用此字符串,其中需要使用String值加载文件。我只是得到一个字符串是零或无任何错误。

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

请指出正确的方向。


在libraryTableViewController中我声明了

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

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

问题出在另一个视图控制器类中,我想从tableViewData plist

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

但是得到零; ?

3 个答案:

答案 0 :(得分:4)

如果代码在另一个类或实例中,则您没有对其他类/实例的类似命名属性的神奇访问权限 - declared properties上的文档可能有助于消除误解。
在您的第二个实例中,fileToLoad可能是nil,因为它从未在那里初始化。

您需要引用要从中获取值的实例并检索属性值:

NSString *myFileToLoad = myTableViewController.fileToLoad;

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

答案 1 :(得分:3)

从它的声音中,你需要阅读面向对象的编程。 Apple有一些关于OOP的指南以及如何在Objective-C中实现它:

http://developer.apple.com/iphone/library/documentation/cocoa/conceptual/oop_objc/articles/oooop.html

答案 2 :(得分:1)

关于代码的几点:

  1. 您已使用retain向属性声明了NSString变量以进行内存管理。具有可变/不可变类型的类集群的正确内存管理模型是copy
  2. 即使您已将fileToLoad声明为属性,也可以直接在didSelectRowAtIndex方法中进行设置,这会绕过内存管理以及更改属性可能生成的任何KVO / KVC通知。除初始化或拆除方法外,您应使用self.fileToLoad更改属性值。