Как создать пользовательский тип файла, который содержит текст и изображения? - PullRequest
1 голос
/ 26 апреля 2011

Я знаю, что на это будет довольно сложно ответить, но мне нужно сохранить текст и изображения в один файл (как это делает фотошоп). Должен ли я сделать пользовательский тип файла или есть другой способ сделать это?

Если мне нужен пользовательский тип файла, кто-нибудь может дать мне ссылку на что-то, что может помочь мне правильно сохранить тип файла? Если есть другой способ, как я могу это сделать?

ПРИМЕЧАНИЕ. Я использую это в приложении, которое импортирует три изображения и позволяет пользователям размещать над ними текст, поэтому я не смогу получить информацию, необходимую для хранения изображений в виде текста. Если это то, что я должен сделать, мне понадобится ссылка на некоторую полезную информацию.

1 Ответ

2 голосов
/ 26 апреля 2011

Простой способ сохранить объекты в файле - добавить их в 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-файле вашего приложения.

...