如何创建保存文本和图像的自定义文件类型?

时间:2011-04-26 02:10:00

标签: objective-c cocoa nsstring nsimage

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

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

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

1 个答案:

答案 0 :(得分:2)

将对象保存到文件的简单方法是将它们添加到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文件中定义自定义文件类型。