我知道这有点难以回答,但我需要将文本和图像保存到单个文件中(就像Photoshop一样)。我应该制作自定义文件类型,还是有其他方法可以做到这一点?
如果我需要自定义文件类型,有人请给我链接到可以帮助我使文件类型正确存储数据的内容吗?如果还有其他方法,我该怎么做?
注意:我在导入三个图像的应用程序中使用它,并允许用户将文本放在它们上面,因此我可能无法以任何方式获取将图像存储为文本所需的信息。如果这是我必须做的事情,我需要一些有用信息的链接。
答案 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文件中定义自定义文件类型。