我正在尝试运行一个返回NSArray的非void函数,但是当我运行它时,甚至没有一个日志行:
- (NSArray *) arrayFunction
{
return myList;
}
这就是我调用函数的方式:
- (void) myMainFunction
{
[self arrayFunction];
}
我也尝试过使用NSLog和一个void函数而不是NSArray,但这也不会出现。
这是一个NSView类。
谢谢你的帮助!
* 编辑:* 完整代码: 实施文件:
#import "LogNavigator.h"
@implementation LogNavigator
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
[self myMainFunction];
return self;
}
- (void)drawRect:(NSRect)dirtyRect
{
// Drawing code here.
}
- (NSArray *) arrayFunction
{
// # Get the list of .txt files, this part works correctly as expected in CodeRunner
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Desktop"];
NSArray *directoryList = [[[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil]
pathsMatchingExtensions:[NSArray arrayWithObjects:@"txt", nil]];
return directoryList;
}
- (void) myMainFunction
{
[self arrayFunction];
}
@end
答案 0 :(得分:0)
如果使用Interface Builder创建此自定义NSView
,则应覆盖awakeFromNib
:
- (void)awakeFromNib {
[self myMainFunction];
}
但请注意,您忽略了arrayFunction
的返回,因此如果可以确定调用没有副作用,编译器可能会在optmimized发布版本中完全省略该调用。
编辑:请注意,您需要使用IB在NSView
内的窗口的视图中设置MainMenu.xib
派生类,为了在加载视图时触发此方法。
答案 1 :(得分:0)
从笔尖(或故事板)加载对象时不调用普通初始化程序,而是调用initWithCoder
。
从笔尖设置对象时,您应该覆盖initWithCoder
并将初始化代码放在那里。
如果你需要在nib中访问或设置其他对象作为初始化的一部分,那么awakeFromNib
是一种更好的覆盖方法,因为它是在加载了所有其他nib对象后调用的。
修改强>
将视图对象添加到nib时,是否将其指定为LogNavigator
?这是人们经常忘记做的事情。