《文件操作与“WhatAboutThatFile?”应用开发》
立即解锁
发布时间: 2025-08-25 02:23:55 阅读量: 1 订阅数: 8 


Mac上Cocoa编程入门指南
### 《文件操作与 “What About That File?” 应用开发》
在进行文件操作时,Cocoa 提供了多种方式和类来满足不同的需求。下面将详细介绍文件操作的相关知识以及 “What About That File?” 应用的开发过程。
#### 1. 文件操作基础类
在文件操作中,有几个关键的类值得关注:
- **`dictionaryWithContentsOfFile:` 类方法**:用于从文本编辑器或 Xcode 的 plist 编辑器创建的配置文件中读取数据。
- **`NSPropertyListSerialization` 类**:专门用于处理属性列表格式。如果需要以通用方式解析属性列表,并进行完整的错误报告和更多控制,可以使用其类方法 `propertyListWithData:options:format:error:`。
- **`NSData` 类**:提供最通用的文件访问方式。它可以从磁盘读取任何类型的数据,并将其表示为字节数组供我们使用,是处理二进制数据的理想选择。还可以将文件映射到虚拟内存,示例代码如下:
```objc
NSData *myData = [NSData dataWithContentsOfFile:@"/path/to/something"
options:NSDataReadingMappedIfSafe error: &myError];
```
此外,提到的每个类都包含 `writeToFile:atomically:` 方法,其第二个参数是一个布尔值,指定数据是否应先写入辅助文件,然后在所有数据写入后替换原始文件。`NSString` 版本的此方法已弃用,应使用 `writeToFile:atomically:encoding:error:` 方法,该方法要求我们指定使用的文本编码,并让我们有机会检查可能发生的任何错误。`NSData` 提供了类似的 `writeToFile:options:error:` 方法,也能让我们查看写入文件时发生的错误。
#### 2. 高级文件操作
除了基本的文件读写操作,Cocoa 还提供了许多类,让我们可以像 Finder 一样处理文件。我们可以访问文件系统属性、获取文件图标、查看默认打开该文件的应用程序等。接下来将通过 “What About That File?” 应用来探索这些功能。
#### 3. “What About That File?” 应用开发
##### 3.1 创建项目
使用 Xcode 创建一个新的 Cocoa 应用程序,命名为 `WhatAboutThatFile`,确保启用 ARC 并为项目分配类前缀 `WAT`。这将创建一个简单的项目,包含 `WATAppDelegate` 类和 `MainMenu.xib` 文件。
##### 3.2 代码实现
- **`WATAppDelegate.h` 头文件**:声明了大量用于通过 Cocoa 绑定访问值的属性,以及一个让用户从菜单中打开文件的操作方法。
```objc
//
// WATAppDelegate.h
//
#import <Cocoa/Cocoa.h>
@interface WATAppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (strong) NSFileWrapper *fileWrapper;
@property (strong) NSURL *fileURL;
@property (assign) NSStringEncoding chosenEncoding;
@property (readonly) NSDictionary *fileAttributes;
@property (readonly) NSString *filename;
@property (readonly) NSImage *fileIcon;
@property (readonly) NSImage *opensAppIcon;
@property (readonly) NSString *opensAppName;
@property (weak) NSString *stringEncodingName;
@property (readonly) NSString *fileStringValue;
@property (readonly) NSDictionary *encodingNames;
- (IBAction)chooseFile:(id)sender;
@end
```
- **`chooseFile:` 方法**:使用 `NSOpenPanel` 类让用户选择要检查的文件。如果用户选择了文件,将设置所有实例变量。`chosenEncoding` 属性设置为 0,让系统稍后尝试推断字符串编码类型。然后根据选择设置 `fileURL`,最后根据 `fileURL` 设置 `fileWrapper`。同时进行了错误处理。
```objc
- (IBAction)chooseFile:(id)sender
{
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setCanChooseFiles:YES];
[openPanel setCanChooseDirectories:NO];
[openPanel setResolvesAliases:NO];
[openPanel setAllowsMultipleSelection:NO];
if ([openPanel runModal] == NSFileHandlingPanelOKButton) {
self.chosenEncoding = 0;
self.fileURL = [openPanel URL];
NSError *fileError;
self.fileWrapper = [[NSFileWrapper alloc] initWithURL:self.fileURL
options:0
error:&fileError];
if (!self.fileWrapper) {
NSRunAlertPanel(@"Couldn't access file",
[fileError localizedDescription], nil, nil, nil);
}
}
}
```
- **`filename` 和 `fileIcon` 方法**:通过 Cocoa 绑定供窗口中的 GUI 对象读取。使用 `keyPathsForValuesAffectingFilename` 和 `keyPathsForValuesAffectingFileIcon` 类方法确保当 `fileURL` 或 `fileWrapper` 值更改时,绑定到 `filename` 或 `fileIcon` 的视图会自动重新加载内容。
```objc
+ (NSSet *)keyPathsForValuesAffectingFilename
{
return [NSSet setWithObjects:@"fileURL", @"fileWrapper", nil];
}
- (NSString *)filename
{
return [self.fileWrapper filename];
}
+ (NSSet *)keyPathsForValuesAffectingFileIcon
{
return [NSSet setWithObjects:@"fileURL", @"fileWrapper", nil];
}
- (NSImage *)fileIcon
{
return [self.fileWrapper icon];
}
```
- **`opensAppName` 和 `opensAppIcon` 方法**:使用 `NSWorkspace` 类获取默认打开所选文件的应用程序的名称和图标。同样使用 `keyPathsForValuesAffectingOpensAppName` 和 `keyPathsForValuesAffectingOpensAppIcon` 方法确保值的正确刷新。
```objc
+ (NSSet *)keyPathsForValuesAffectingOpensAppName
{
return [NSSet setWithObjects:@"fileURL", @"fileWrapper", nil];
}
- (NSString *)opensApp
```
0
0
复制全文
相关推荐










