Я делаю небольшие изменения в 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], но этот вызов, похоже, не сглаживает фильм. Я не хочу никаких внешних ссылок в моем файле.