objective-c - 如何创建包含文本和图像的自定义文件类型?

标签 objective-c cocoa nsstring nsimage

我知道这有点难以回答,但我需要将文本和图像保存到一个文件中(就像 Photoshop 所做的那样)。我应该创建自定义文件类型,还是有其他方法可以做到这一点?

如果我需要自定义文件类型,有人可以给我一个可以帮助我使文件类型正确存储数据的链接吗?如果有其他方法,我该怎么做?

注意:我在导入三个图像的应用程序中使用它,并允许用户在它们上面放置文本,因此我可能无法获取以任何方式将图像存储为文本所需的信息。如果这是我必须做的,我将需要一些有用信息的链接。

最佳答案

将对象保存到文件的一种简单方法是将它们添加到 NSDictionary 中,然后使用 NSArchiver 将字典存档到数据中。

例如在基于文档的应用程序中:

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError {
    if ([typeName isEqualToString:@"YourTypeName"]) {
          //Create a Dictionary
          NSMutableDictionary *dictToSave = [NSMutableDictionary dictionary];
          //Add the first image to the dictionary
          [dictToSave setObject:image1 forKey:@"Image1"];
          //Add the first image's text
          [dictToSave setObject:image1text forKey:@"Image1Text"];
          //etc.
          [dictToSave setObject:image2 forKey:@"Image2"];
          [dictToSave setObject:image2text forKey:@"Image2Text"];              
          [dictToSave setObject:image3 forKey:@"Image3"];
          [dictToSave setObject:image3text forKey:@"Image3Text"];
          //Return the archived data
          return [NSArchiver archivedDataWithRootObject:dictToSave];
    }
    //Don't generate an error
    outError = NULL;
    return nil;
}

要读取此数据,只需取消存档字典并设置对象即可:

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName
error:(NSError **)outError {
    if ([typeName isEqualToString:@"MyTypeName"]) {
        NSMutableDictionary *readDict = 
        [NSUnarchiver unarchiveRootObjectWithData:data];
        image1 = [readDict objectForKey:@"Image1"];
        image1text = [readDict objectForKey:@"Image1Text"];
        image2 = [readDict objectForKey:@"Image2"];
        image2text = [readDict objectForKey:@"Image2Text"];
        image3 = [readDict objectForKey:@"Image3"];
        image3text = [readDict objectForKey:@"Image3Text"];
    }
    outError = NULL;
    return YES;
}

您还需要在应用的 plist 文件中定义自定义文件类型。

关于objective-c - 如何创建包含文本和图像的自定义文件类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5785192/

相关文章:

ios - 如何从我的照片流相册中获取照片

iphone - 获取对 UIPopoverController w/segues 的引用

cocoa - 火狐 cocoa 插件

swift - Cocoa:如何使用 NSDocument 从另一个应用程序更改文件后重新读取文件内容?

ios - 在 NSString 中写入 %

objective-c - 使用代码对 Objective-C NSTableView 中的单元格中的文本进行加粗和取消加粗

ios - 如何分配 skpayment 应用程序用户名

cocoa - 在 cocoa 应用程序中的非默认浏览器中打开网址

string - 获取字符串的前十个字符

ios - NSString stringWithFormat 不适用于货币符号等特殊字符