objective-c - Cocoa:从单独的类获取方法的返回值

标签 objective-c cocoa class methods nsstring

我知道这很简单,这就是为什么我一直疯狂地试图自己弄清楚,但我已经束手无策了。

当用户单击按钮时,应该执行以下操作:

- (IBAction)startAction:(id)sender {
MyClass *anInstance = [[MyClass alloc] init];
NSLog(@"the name is:%@", [anInstance name]);

正如你所看到的,MyClass 有一个“name”方法,它是这样的:

- (NSString *)name {
return [nameInput stringValue];
NSLog(@"stringValue = %@", [nameInput stringValue]);

nameInput 是一个文本字段,用户填写名称,按下按钮调用“startAction”,该方法应该调用另一个类中的“name”,该类应该从文本字段返回字符串值并生成日志.

实际发生的情况是,当按下开始时,日志显示“名称是:(null)”。第二条日志甚至没有出现。我认为这是因为“名称”方法没有被调用。但我不知道为什么。我应该指定它们位于不同的类中,并且我声明了“name”方法,如下所示:

- (NSString*)name;

编辑:经过一番闲逛后,我发现当从它自己的类调用“name”方法时,日志会正确显示文本字段中的内容。我在“name”方法中添加了一个额外的日志,我可以看到它正在从另一个类调用,但它返回的值仍然是(null),这意味着在阻止类获取文本字段字符串的调用。

编辑:我不确定这是否重要,但其中一个类是 NSObject 的子类,另一个是 NSViewController 的子类。

如果您需要更多信息,请告诉我。 感谢您的帮助。

最佳答案

name方法中,您不能在NSLog()命令之前返回值——从方法返回是方法中发生的最后一件事(我很惊讶您没有收到有关 NSLog() 函数未调用的警告)。试试这个:

- (NSString *)name {
    NSLog(@"stringValue = %@", [nameInput stringValue]);
    return [nameInput stringValue];
}

至于为什么 nameInput 没有值,我猜你没有在 Interface Builder 中正确连接文本字段。

关于objective-c - Cocoa:从单独的类获取方法的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6977034/

相关文章:

ios - NSSet Iteration 比 NSMutableArray Iteration 消耗更多时间,NSArray Iteration 比 NSMutableArray Iteration 消耗更多时间

objective-c - 无法用 clang 编译 Objective-C 代码

cocoa - 如果不需要使其失效,是否有任何理由保留预定的 NSTimer?

python - 防止从子类访问实例变量,而不影响基类

objective-c - 在 objective-c 中创建 json 对象数组

objective-c - 在 NSTextView 中捕获关键事件的最佳方式?

objective-c - 防止 NSBrowserCell 工具提示过宽

c++ - vector 元素 ID 的 C++

java - 获取类的所有实例

objective-c - 如何从 NSPageController arrangedObjects 中删除对象?