Этот код работает на iOS4.3, а не iOS5 - PullRequest
3 голосов
/ 13 октября 2011

Следующий код работает должным образом на iOS4.3 iPhone и iPad и iOS5 iPhone, но вылетает на iOS5 iPad.Это вызывается для первого представления, которое я вызываю в приложении на основе вкладок, когда предыдущий запуск приложения был отменен.Пользователь может продолжить предыдущий запуск или сброс.Я попытался переместить этот код в секцию -viewWillAppear и -viewDidAppear, но безрезультатно.Кто-нибудь еще испытывал это?(Кстати, я подтвердил все соединения в моих XIB, чтобы убедиться, что это не проблема с частями iPad этого UniversalApp.

- (void)viewDidLoad {

 BOOL     continueYesNo;

 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

 continueYesNo = [prefs boolForKey:@"keyContinueMeeting"];     

 if (continueYesNo) {

      NSString *message_continue = [[NSString alloc] initWithFormat:@"Do you want to Continue the Prior event"];

      UIActionSheet *actionSheet = [[UIActionSheet alloc] 

           initWithTitle:message_continue 

           delegate:self

           cancelButtonTitle:@"Reset" 

           destructiveButtonTitle:@"Continue Meeting"

           otherButtonTitles:nil];

    [actionSheet showFromTabBar:self.tabBarController.tabBar];  // This is the line that crashes.  The program checks for a terminated APP and status in preferences

 }

 else {

      resetStuff.hidden = YES;

 }

}

Вот текстсбой -

Current language:  auto; currently objective-c

2011-10-12 21: 02: 55.530 потерянного времени [3884: 17603] * Ошибка подтверждения в - [UIActionSheet showInView:], /SourceCache/UIKit_Sim/UIKit-1912.3/UIActionSheet.m:4630 2011-10-12 21: 02: 55.532 ИМЯ ПРИЛОЖЕНИЯ [3884: 17603] Завершение работы приложения из-за невыполненного исключения «NSInternalInconsistencyException», причина: «Неправильный параметр не удовлетворяет: view! =NiL»** стек Первый бросок вызова: (0x1d87052 0x1f18d0a 0x1d2fa78 0x2742db 0x90b47e 0x90b122 0x90b356 0x90b653 0x6fe1 0x60064e 0x61bb89 0x61b9bd 0x619f8a 0x619e2f 0x617ffb 0x61885a 0x601fbf 0x60221b 0x6030f1 0x571fec 0x577572 0x57172b 0x2b86 0x5389d6 0x5398a6 0x548743 0x5491f8 0x53caa9 0x2315fa9 0x1d5b1c5 0x1cc0022 0x1cbe90a 0x1cbddb4 0x1cbdccb 0x5392a7 0x53aa9b 0x2abd0x2325) завершить вызов вызывающего исключения (GDB

Цитата

Вот представитель .h

#import <UIKit/UIKit.h>    
@interface W_AppDelegate : NSObject <UIApplicationDelegate> {
        UIWindow *window;
        UITabBarController *rootController;
        float   floatVal;
        NSDate  *currentTime;
        NSDate  *previousTime;
        NSDate  *currentQTime;
        NSDate  *previousQTime;
        BOOL    continueMeeting;
    }

    @property (nonatomic, retain) IBOutlet UIWindow *window;
    @property (nonatomic, retain) IBOutlet UITabBarController *rootController;
    @property (nonatomic, readwrite) float floatVal;
    @property (nonatomic, readwrite) BOOL continueMeeting;
    @property (nonatomic, retain) NSDate *currentTime;
    @property (nonatomic, retain) NSDate *previousTime;
    @property (nonatomic, retain) NSDate *currentQTime;
    @property (nonatomic, retain) NSDate *previousQTime;
    @end

И .m

#import "W.h"


@implementation W_AppDelegate

@synthesize window;
@synthesize rootController;
@synthesize floatVal;
@synthesize currentTime;
@synthesize previousTime;
@synthesize currentQTime;
@synthesize previousQTime;
@synthesize continueMeeting;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    [window addSubview:rootController.view];
    [window makeKeyAndVisible]; 
    return YES;
}

@end

Ответы [ 3 ]

1 голос
/ 13 октября 2011

Из текста ошибки: view != nil из [UIActionSheet showInView:], вид равен нулю.Либо actionSheet, либо self.tabBarController.tabBar равно нулю.Добавьте несколько NSLogs, чтобы убедиться, что ни один из них не равен nil.

Сделайте вещи немного сложнее, замените:

NSString *message_continue = [[NSString alloc] initWithFormat:@"Do you want to Continue the Prior event"];

на

NSString *message_continue = @"Do you want to Continue the Prior event";

Как настроен ваш делегат?

1 голос
/ 13 октября 2011

Попробуйте позвонить своему [super viewDidLoad]; первый. Возможно, ваш вид еще недостаточно настроен, чтобы выдвинуть actionSheet.

1 голос
/ 13 октября 2011

Включили ли вы ARC (автоматический подсчет ссылок) для этого проекта?Без ARC вы будете вытекать объекты в основной ветви вашего оператора if.

С включенным ARC он будет выпускать для вас те объекты, которые вы, вероятно, не ожидали, и это вызоветпроблемы.

Редактировать : похоже, ваша панель вкладок еще не загружена (ИЛИ: была загружена и теперь стала выгруженной).Это произошло бы, если бы ARC думала, что это больше не должно остаться.Убедитесь, что self.tabBarController указывает на что-то реальное, когда вы вызываете actionSheet, чтобы представить себя.

Я могу сказать это из-за генерируемого исключения, оно говорит: «вы пытаетесь представить это в ноль».вид ", более или менее.Это ошибка программиста.Полагаю, что вы ранее производили утечку tabBarController где-то еще, и теперь, когда вы использовали ARC, эта утечка автоматически устраняется за вас, а tabBarController освобождается.

...