目标C:方法看不到彼此?

时间:2013-12-16 04:22:36

标签: objective-c methods function-pointers encapsulation

我是Objective-C的新手,所以请耐心等待。我不是在寻找代码讲义,但是对于在哪里寻找答案的一些指导将不胜感激。

我是一个电影编辑器,我用Python原型化了一个小实用程序,它读取了一个编辑决策列表(这是一个带有时间码和与视频编辑相关的各种其他信息的文本块)并在一行解析文件一段时间并提取某些信息以创建字幕列表。

一旦我使用Python工作,我就决定将代码迁移到Objective-C,这样我就可以将我的实用程序作为二进制可执行文件分发给其他编辑器。

对于背景故事来说,现在对于这个问题......

昨晚我设法构建了GUI,这是一个简单的按钮,用于启动文件请求者(加载文本文件)一个按钮来转换文件,还有一个按钮来保存新转换的文件。还有一个文本视图对象来显示转换后的文件。我设法将所有小部件附加到新类,我可以测试每个被单击的按钮,我可以手动将文本写入文本视图小部件。到目前为止,一切都很好。

我遇到的问题是弄清楚如何将信息从一种方法传递到另一种方法。特别是,如果我使用openFile方法打开文件,那么如何将该信息传递给convertFile方法?当我尝试时,我收到一条消息,告诉我我的openFile未定义。我假设这都是关于数据封装的。但是这很令人沮丧,我是一个新手,我甚至不确定我应该寻找什么答案。在Python中它非常简单:给定类中的任何方法似乎都允许无问题地无缝转移到任何其他方法。

总结一下,我确实打开了文件请求者,并且我能够读取该文件。我甚至可以逐行解析它。但这是它自己的方法,我不能为我的生活弄清楚如何将该信息稍后传递给“转换”方法,然后如何将转换后的文件传递给“保存”方法。

指导很多人赞赏。提前谢谢。

Chris Conlee

1 个答案:

答案 0 :(得分:-1)

在这方面,ObjC与Python没有什么不同。在这两种语言中,数据可以与对象相关联,与函数/方法本地或全局相关联。您可以将数据作为参数直接从一个方法传递到另一个方法,也可以通过将数据存储在两个方法都可以访问的位置(例如,实例变量)来间接传递数据。

对于前者,你会做这样的事情(填写假设的实现,因为我不知道你的方法是做什么的):

@implementation MyClass //in the .m
- (void) openFile:(NSString *)pathToFile {
    NSData *fileData = [NSData dataWithContentsOfFile:pathToFile];
    [self convertFile:fileData];
}

- (void) convertFile:(NSData *)fileData {
    //whatever you wanted to do to fileData
}
@end

对于后者,您需要在对象上声明要存储的内容的存储空间,以及如何访问该存储空间。现代ObjC将这些任务与@property语法结合起来:

@interface MyClass : NSObject //in the .h
@property (readwrite, strong) NSData *fileData;
@end

@implementation MyClass //in the .m
- (void) openFile:(NSString *)pathToFile {
    self.fileData = [NSData dataWithContentsOfFile:pathToFile];
}

- (void) convertFile {
    //whatever you wanted to do to self.fileData
}
@end