iPhone: настройка изображения программно из папки «Документы» - PullRequest
0 голосов
/ 24 мая 2011

Привет, у меня есть выход UIImageView в одном из моих представлений, который называется promoBanner.Я пытаюсь написать код, который будет устанавливать этот выход программно.По сути, приложение поставляется с изображением в NSBundle.Но я хочу убедиться, что он выбирает изображение из папки документов.Я хочу сделать это потому, что в будущем будут разные «рекламные акции», и приложение должно отображать правильное изображение в представлении «promoBanner».Вот код, который я написал, но я не уверен, почему он не работает.Может кто-нибудь, пожалуйста, дайте мне идею:

- (void)viewDidLoad
{
    [super viewDidLoad];
    //==========================================================================
    NSError *error;
    NSString *errorDesc = nil;
    NSPropertyListFormat format;
    NSData *promoImg;
    NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *promoImgDocPath = [rootPath stringByAppendingPathComponent:@"promoBanner.png"];
    NSFileManager *fileManager = [NSFileManager defaultManager];

    if (![fileManager fileExistsAtPath:promoImgDocPath]) 
       {
        NSString *plistBundlePath = [[NSBundle mainBundle] pathForResource:@"promoBanner" ofType:@"png"];
        [fileManager copyItemAtPath:plistBundlePath toPath:promoImgDocPath error:&error]; 
        if(![fileManager fileExistsAtPath:promoImgDocPath])
           {
            NSLog(@"The copy function did not work, file was not copied from bundle to documents folder");
           }
       }

    self.promoBanner.image =[UIImage imageWithContentsOfFile:promoImgDocPath];

    if (!self.promoBanner.image) 
       {
        NSLog(@"Error setting image: %@, format: %d", errorDesc, format);
       }

Большое спасибо Ошибка:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSFileManager copyItemAtPath:toPath:error:]: source path is nil'

* Стек вызовов при первом броске:

CoreFoundation 0x3759dc7b __exceptionPreprocess + 114

libobjc.A.dylib 0x32d9bee8 objc_exception_throw + 40

Повышение CoreFoundation 0x3759dac3 + [повышение NSException *: формат: аргументы:] 0 1016FF + 070 * 1016F5 + 070 * 7 * FF5 + 0 * 0 * 0 * 0 * 0 * * 7 * F3FF_FX_FX_FX_F_NF_FD_C_B_F_C_F_C_F_C_F_C_F_C_N_F_C_N_F_LIF_FAR_S_K_FD_C_B_C_F_C__D_RU__TROW_COM_FUNDATION_X_WARCE_X_WORK_XER_FROWN_FROWN_COMFING_FUNCING_NIFXFING_FARKING_FARCING.Повышение NSException: формат:] + 30

Foundation 0x351a8653 - [NSFileManager copyItemAtPath: toPath: error:] + 90

Ресторан 0x000068c3 - [AboutViewController viewDidLoad] + 286

* 1022 U0x35926e60 - [представление UIViewController] + 160

Ответы [ 2 ]

0 голосов
/ 24 мая 2011
[[NSBundle mainBundle] pathForResource:@"promoBanner" ofType:@"png"];

возвращается ноль. Если файл не находится в вашей рабочей области, добавьте его. Если это так, убедитесь, что вы действительно включили изображение в сборку. В Xcode 4:

  • Выберите корневой элемент проекта в браузере файлов.
  • Выберите подходящую цель из списка «Цели»
  • Выберите вкладку «Фазы сборки»
  • Разверните пункт «Копировать ресурсы комплекта» и найдите файл изображения.
0 голосов
/ 24 мая 2011

Я могу получить вашу ошибку, если promoBanner.png не является файлом в моем комплекте.Однако, если я добавлю файл в проект, код скомпилируется.

Вы уверены, что добавили promoBanner.png в свой проект (перетаскивая его в XCode или используя «Файл -> Добавить файлы в»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...