我是目标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"];
但是得到零; ?
答案 0 :(得分:4)
如果代码在另一个类或实例中,则您没有对其他类/实例的类似命名属性的神奇访问权限 - declared properties上的文档可能有助于消除误解。
在您的第二个实例中,fileToLoad
可能是nil
,因为它从未在那里初始化。
您需要引用要从中获取值的实例并检索属性值:
NSString *myFileToLoad = myTableViewController.fileToLoad;
根据您的架构,可能还有其他/更好的解决方案。
答案 1 :(得分:3)
从它的声音中,你需要阅读面向对象的编程。 Apple有一些关于OOP的指南以及如何在Objective-C中实现它:
答案 2 :(得分:1)
关于代码的几点:
retain
向属性声明了NSString变量以进行内存管理。具有可变/不可变类型的类集群的正确内存管理模型是copy
fileToLoad
声明为属性,也可以直接在didSelectRowAtIndex
方法中进行设置,这会绕过内存管理以及更改属性可能生成的任何KVO / KVC通知。除初始化或拆除方法外,您应使用self.fileToLoad
更改属性值。