我养成了以这种方式编写错误处理的习惯:
NSError* error = nil;
NSDictionary *attribs = [[NSFileManager defaultManager] removeItemAtPath:fullPath error:&error];
if (error != nil) {
DLogErr(@"Unable to remove file: error %@, %@", error, [error userInfo]);
return;
}
Run Code Online (Sandbox Code Playgroud)
但看文档似乎我错了:
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)
如果发生错误,则返回时包含描述问题的NSError对象.如果您不想要错误信息,请传递NULL.
从技术上讲,nil和NULL之间没有区别,所以这是否意味着我实际上关闭它并且永远不会收到错误消息(即使上面示例中的删除失败了)?有没有更好的方法来编码?
谢谢.
我正在尝试使用NSToolbar编写多面板首选项窗口,如许多Mac应用程序中所示.有一些教程通过以编程方式填充工具栏来实现这一点,但这似乎需要大量的"机械"代码,我认为通过在IB中设置整个工具栏来保存.每个NSToolbar项调用下面的操作,标记用于选择视图(使用IBOutlet从相同的nib引用):
-(IBAction)changeViewController:(id) sender {
NSToolbarItem *tbi = (NSToolbarItem*)sender;
NSString* label = [tbi label];
NSInteger tag = [tbi tag];
[self displayViewController:tag];
NSWindow* window = [self window];
[window setTitle:label];
}
Run Code Online (Sandbox Code Playgroud)
然后我在每个NSToolbarItem上设置Autovalidates,它将在工具栏项上给出选定/取消选择的外观.
现在这是我的问题:我无法找到设置初始状态的好方法.当我打开窗口时,没有选择任何工具栏项目,我也没有得到任何udpate代码,这将允许我正确选择它.我想出的是:
- (void) awakeFromNib {
[self displayViewController:kGeneralPrefsTag];
NSWindow* window = [self window];
NSToolbar *toolbar = [window toolbar];
[toolbar setSelectedItemIdentifier:@"generalPreferences"];
[window setTitle:@"General"];
}
Run Code Online (Sandbox Code Playgroud)
这是所有冗余信息:1)我需要为此工具栏项声明项目标识符2)我手动复制第一个首选项面板的名称,以便能够设置窗口标题.
有没有更好的方法来初始化工具栏?我怎么能调用工具栏的第一项,以便它调用changeViewControllerAction?
谢谢.