#iphone #objective-c #cocoa-touch #ipad #nsfilemanager
#iPhone #objective-c #cocoa-touch #iPad #nsfilemanager
Вопрос:
Я нашел этот фрагмент кода из предыдущего поста здесь. В режиме iPad Simulator все работало так, как задумывалось, но не тогда, когда я переключился в режим реального устройства iPad. Вместо этого появилось сообщение об ошибке «таких файлов не существует». Перед выполнением этих кодов я создал папку Populator, щелкнув правой кнопкой мыши на xxxxxx.app, выбрал «показать содержимое пакета» и поместил некоторые файлы в папку Populator. Копирует ли Xcode весь пакет приложений на устройство iPad? Есть предложения?
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *sourcePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Populator"];
NSString *folderPath = [documentsDirectory stringByAppendingPathComponent:@"Files"];
NSLog(@"Source Path: %@n Documents Path: %@ n Folder Path: %@", sourcePath, documentsDirectory, folderPath);
NSLog(@"docdire: %@", documentsDirectory);
NSLog(@"loadImage button clicked");
label.text = [@"sourcePath: " stringByAppendingString:sourcePath];
textField.text = [@"clicked: " stringByAppendingString:documentsDirectory];;
NSError *error;
if([[NSFileManager defaultManager] copyItemAtPath:sourcePath toPath:folderPath error:amp;error]){
NSLog(@"File successfully copied");
label.text = @"copy succeeded";
} else {
NSLog(@"Error description-%@ n", [error localizedDescription]);
NSLog(@"Error reason-%@", [error localizedFailureReason]);
label.text = [@"Error description: " stringByAppendingString:[error localizedDescription]];
label2.text = [@"Error reason: " stringByAppendingString:[error localizedFailureReason]];
}
Комментарии:
1. Я узнал, что есть 2 места, в которых есть пакет xxxxx.app. Один предназначен для симулятора, а другой — для дистрибутива сборки.
Ответ №1:
Вы не можете добавлять файлы или папки в NSBundle после того, как он был создан. Для устройства Xcode собирается подписать NSBundle. Любые файлы и папки, которые вы хотите разместить в NSBundle на устройстве, должны быть добавлены в ваш проект Xcode.
Другой способ добавить файлы / папки в ваш NSBundle — это на этапе сборки до подписания пакета.
Ответ №2:
Не имея доступа к реальному списку файлов, вы можете захотеть проверить регистр имен файлов. Симулятор iPhone не чувствителен к регистру, в то время как файловая система iPad чувствительна к регистру. В прошлом это ставило в тупик многих разработчиков.
Ответ №3:
Как и в моем комментарии в исходном вопросе:
Я узнал, что есть 2 места, в которых есть пакет xxxxx.app. Один предназначен для симулятора, а другой — для дистрибутива сборки.