Я вношу небольшие изменения в QTMovie в приложении с использованием архитектуры NSDocument (например, добавляю дорожку, как показано ниже). После редактирования я хочу сохранить в исходный файл. Тем не менее, я продолжаю получать сообщение об ошибке «файл занят». Я предполагаю, что это связано с некоторой оплошностью, которую я допустил при обработке файлов, или с ошибкой в том, как я использую NSDocument. Любые советы будут полезны! Вот (некоторые) соответствующий код:
// open file that has the track I want to add to my movie
QTMovie* tempMovie = [QTMovie movieWithURL:outputFileURL error:nil];
// Use old API to add the track
AddMovieSelection([movie quickTimeMovie], [tempMovie quickTimeMovie]);
// get the filename from the NSDocument
NSString *filename = [[self fileURL] path];
NSLog(@"writing to filename: %@", filename);
// FLATTEN the movie file so I don't get external references
NSMutableDictionary *attributes = [NSMutableDictionary dictionaryWithCapacity:1];
[attributes setObject:[NSNumber numberWithBool:YES] forKey:QTMovieFlatten];
// attempt to write
NSError *error;
// this is where I get the "file is busy"
if (![movie writeToFile:filename withAttributes:attributes error:&error]) {
NSLog(@"Error: %@", [error localizedDescription]);
NSRunAlertPanel(@"Error", [error localizedDescription], nil, nil, nil);
}
Должен ли я сначала выпустить фильм в моем NSDocument? Каков "правильный" способ сделать это? Имейте в виду, я не обязательно заканчиваю этот документ, я не закрываю его. Я только что закончил эту операцию и хочу, чтобы файл на диске отражал мои изменения. Я бы с удовольствием использовал [movie updateMovieFile], но этот вызов, похоже, не сглаживает фильм. Мне не нужны внешние ссылки в моем файле.