Я работаю над документированным приложением, и я хочу использовать пакет документов в качестве формата файла. Для этого кажется, что метод NSDocument, который мне нужно переопределить, равен
-writeToURL:ofType:error:
.Проблема с NSDocument и writeToURL: ofType: error:
Это иногда работает, но только при определенных условиях. Например, этот код работает:
- (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError
{
NSFileWrapper *wrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:nil];
[wrapper addRegularFileWithContents:[@"please work" dataUsingEncoding:NSUTF8StringEncoding] preferredFilename:@"foobar"];
[wrapper writeToURL:absoluteURL options:NSFileWrapperWritingAtomic originalContentsURL:nil error:outError];
NSDictionary *metadata = [NSDictionary dictionaryWithObject:@"0.1" forKey:@"Version"];
NSURL *mdURL = [NSURL fileURLWithPath:[[absoluteURL path] stringByAppendingPathComponent:@"SiteInfo.plist"]];
[metadata writeToURL:mdURL atomically:YES];
return YES;
}
Но этот код не (это то же самое, что и выше, но с NSFileWrapper бит вынимают):
- (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError
{
NSDictionary *metadata = [NSDictionary dictionaryWithObject:@"0.1" forKey:@"Version"];
NSURL *mdURL = [NSURL fileURLWithPath:[[absoluteURL path] stringByAppendingPathComponent:@"SiteInfo.plist"]];
[metadata writeToURL:mdURL atomically:YES];
return YES;
}
Приведенный выше код ставит эту загадочную ошибку в консоль («Литография» это имя моего приложения, и «.Выходный» является расширение пакета):
NSDocument could not delete the temporary item at file://localhost/private/var/folders/qX/qXL705byGmC9LN8FpiVjgk+++TI/TemporaryItems/(A%20Document%20Being%20Saved%20By%20Lithograph%207)/Untitled%20Site.site. Here's the error:
Error Domain=NSCocoaErrorDomain Code=4 UserInfo=0x10059d160 "“Untitled Site.site” couldn’t be removed."
у меня есть написать что-то к исходному URL прежде чем я могу добавить другие файлы в пакет?
Спасибо за помощь! Я не знал о 'NSPropertyListSerialization'; это должно пригодиться. –