我有两个问题:
当我尝试从不同的类调用一个方法时(这个方法在检查一个条件后修改一个文本字段)该方法被很好地调用(statutInternet中的NSLog工作),但TextField没有被修改。 。 当我从(IBAction)互联网方法这样做时,它可以工作..任何解决方案?
为什么Xcode要我在之前使用_调用我的变量(如internetTextfield)?
WindowsController.h
#import <Cocoa/Cocoa.h>
@interface WindowController : NSWindowController
@property (assign) IBOutlet NSTextField *internetLabel;
- (void)statutInternet;
- (IBAction)internet:(id)sender;
@end
WindowsController.m:
#import "WindowController.h"
@implementation WindowController
- (IBAction)internet:(id)sender;
{
[self statutInternet];
}
- (void)statutInternet;
{
NSLog(@"Callfunctionworks");
if (condition) {
[_internetLabel setStringValue:@"TxtFieldWorks!"];
}
}
我尝试用另一个类调用方法statutInternet:
WindowController *fenetre = [[WindowController alloc] init];
[fenetre statutInternet];
答案 0 :(得分:1)
当我尝试从不同的类调用方法时,它不起作用:
那是因为,您正在使用此代码创建另一个WindowController
实例:
WindowController *fenetre = [[WindowController alloc] init];
这是同一个类的另一个新的独立实例,我猜你没有显示。因此,您希望引用已经显示的窗口而不是创建新实例。
为什么Xcode要我用之前用_调用我的变量(比如internetTextfield)?
那是因为当你使用@property
声明变量时,它会做三件事:
_
作为变量的前缀。你可以在这里阅读一个很好的讨论:@property and retain, assign, copy, nonatomic in Objective-C
答案 1 :(得分:0)
当您调用statutInternet方法时,尚未创建NSTextField(以及所有其他UI项目)。
加载窗口后,您的视图就会准备就绪:
_fenetre = [[WindowController alloc] initWithWindowNibName:@"WindowController"];
[_fenetre showWindow:_fenetre.window];
[_fenetre statutInternet];