2013-07-09 2 views
-3

Я работаю над приложением слайд-шоу. Предполагается, что он будет исчезать и исчезать изображения в массиве. Как-то он отлично работает в ИУ тренажере, но аварии на реальное устройство со следующей ошибкой:Слайд-шоу приложений сбой

«слайд-шоу [4452: 907] * Завершение приложения из-за неперехваченное исключение„NSInvalidArgumentException“, причина:«* - [__ NSArrayM insertObject: atIndex]: объект не может быть нулевым» * Первый стек бросить вызов: (0x31be52a3 0x39a7097f 0x31b2f8d9 0x97e21 0x33a0c595 0x33a4cd79 0x33a48aed 0x33a8a1e9 0x97b5f 0x33a4dad9 0x33a4d663 0x33a4584b 0x339edc39 0x339ed6cd 0x339ed11b 0x356df5a3 0x356df1d3 0x31bba173 0x31bba117 0x31bb8f99 0x31b2bebd 0x31b2bd49 0x33a44485 0x33a41301 0x97853 0x39ea7b20) libC++ abi.dylib: terminate называется throwing exception (lldb) "

Я прикрепляю свой код (я не понимаю, что не так). Кто-нибудь может помочь?

файл Реализация:

//View Controller.m 

    #import "ViewController.h" 

    @interface ViewController() 

    @end 

    @implementation ViewController 

    - (void)viewDidLoad 
    { 
    [super viewDidLoad]; 
    backgroundImageQueue = [[NSMutableArray alloc] init]; 
    [backgroundImageQueue addObject: 
    [UIImage imageNamed:@"DSCN7419.jpg"]]; 
    [backgroundImageQueue addObject: 
    [UIImage imageNamed:@"DSCN7422.jpg"]]; 
    [backgroundImageQueue addObject: 
    [UIImage imageNamed:@"DSCN7238.jpg"]]; 

    /* Add any more images to the queue */ 
    backgroundB.image = [backgroundImageQueue 
    objectAtIndex:[backgroundImageQueue count] - 1]; 
    [backgroundImageQueue insertObject: 
    backgroundB.image atIndex:0]; 
    [backgroundImageQueue removeLastObject]; 
    backgroundA.alpha = 1.0; 
    backgroundB.alpha = 0.0; 
    [self nextAnimation]; 
    } 

    -(void)nextAnimation { 
    backgroundA.image = backgroundB.image; 
    backgroundB.image = [backgroundImageQueue 
    objectAtIndex:[backgroundImageQueue count] - 1]; 
    [backgroundImageQueue insertObject: 
    backgroundB.image atIndex:0]; 
    [backgroundImageQueue removeLastObject]; 
    backgroundA.alpha = 1.0; 
    backgroundB.alpha = 0.0; 

    [UIView beginAnimations:@"fade" context:NULL]; 
    [UIView setAnimationDuration:6]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector: 
    @selector(nextAnimation)]; 
    backgroundA.alpha = 0.0; 
    backgroundB.alpha = 1.0; 
    [UIView commitAnimations]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

Заголовок файла:

//View Controller.h 
#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController{ 

     IBOutlet UIImageView *backgroundA; 
     IBOutlet UIImageView *backgroundB; 
     NSMutableArray *backgroundImageQueue; 

} 

@end 
+0

Возможно, это имя файла DSCN7419.JPG вместо DSCN7419.jpg? – borrrden

+0

Да, имя файла DSCN7419.JPG. – user2563039

+1

Тогда ваш ответ (см. Ответ Марсело) – borrrden

ответ

0

Вы пытаетесь вставить значение nil в массив. Это потому, что один из ваших методов imageNamed: вернулся nil, возможно, потому, что он не нашел изображения с заданным именем.

Различное поведение на устройствах связано с тем, что файловая система устройства чувствительна к регистру, а симулятор - нет.

Кроме того, пожалуйста, правильно отформатируйте свой код. Не прерывайте строки без необходимости в середине вызова метода.

+0

Спасибо, Марсело! Я много узнал о том, как работают файловые системы сегодня! Еще раз спасибо! – user2563039

0

При установке объекта [backgroundImageQueue insertObject: backgroundB.image atIndex:0];, проверка backgroundB.image не является нулевым.

if (backgroundB.image != nil){ 
     [backgroundImageQueue insertObject: backgroundB.image atIndex:0]; 
} 
Смежные вопросы