2014-01-08 72 views
0

我想运行一个非void函数返回一个NSArray,但是当我运行它,还有的甚至没有一个日志行:方法没有得到执行

- (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 
+4

你能显示完整的代码吗?在您发布的代码中,代码运行时实际上不会发生任何事情。您是否尝试添加断点来检查函数调用(在myMainFunction中)是否实际被调用? – Fogmeister

+0

感谢您的快速回复@Fogmeister我刚刚使用了断点,非功能被称为似乎。 –

+0

你为什么要从一个函数调用一个方法?为什么不直接调用该方法? – Abizern

回答

0

如果这个自定义NSView是使用Interface Builder创建的,那么你应该重写awakeFromNib

- (void)awakeFromNib { 
    [self myMainFunction]; 
} 

但是请注意,你忽略了从arrayFunction的返回,所以编译器可能会在optmimized发布版本期间完全省略这个调用,如果它可以的话没有任何副作用。

编辑:请注意,您需要内MainMenu.xib窗口视图内设置NSView派生类,使用IB,为了使视图被加载时要触发这个方法。

+0

似乎没有工作。 –

+0

@JeremiahSmith你正在通过笔尖加载视图? – trojanfoe

+0

不,但我应该像Martin R先前指出的那样。但我不知道我会怎么做,我只想写一个类到我的标准XCode预先设置的nib文件。 –

0

从nib(或故事板)加载对象时不调用普通的初始化器,而是调用initWithCoder

当从笔尖设置对象时,您应该覆盖initWithCoder并将您的初始化代码放在那里。

如果您需要在初始化过程中访问或设置笔尖中的其他对象,那么awakeFromNib是一个更好的重写方法,因为它在所有其他的nib对象被加载后调用。

编辑

当您添加视图对象到笔尖,你指定它的类作为LogNavigator?这是人们经常忘记做的事情。

+0

我想要做的就是编写一个类到XCode预先设置的nib文件中,这个应用程序没有任何XCode预先提供。 –

+0

如果你的项目没有附带一个nib文件,你需要告诉Xcode加载的初始nib或storyboard是什么。如果您使用的是Xcode 5,则在主项目页面中完成。 – Abizern

+0

感谢@Abizern对不起,它带有nib文件,但没有关联的类,这就是问题所在。 –