方法无法运行

时间:2014-01-08 09:58:16

标签: objective-c nsarray nslog

我正在尝试运行一个返回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

2 个答案:

答案 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?这是人们经常忘记做的事情。