У моего приложения странное поведение под iOS 5 - PullRequest
0 голосов
/ 17 октября 2011

В настоящее время я использую последнюю версию Xcode (Xcode 4.2 + iOS 5 SDK).Мое приложение работает на iOS 3.1.3 до iOS 4.x без проблем в течение нескольких месяцев.Но не на iOS 5.

В отладчике я вижу, что мои переменные записаны неправильно.Фактически вместо этого изменяются другие переменные, отличные от ожидаемых.

Я хочу инициализировать новый контроллер представления, а затем переключиться.Это мой код:

@interface ReviewDetailController : UIViewController <UIWebViewDelegate>
{
    IBOutlet UIBarButtonItem *btnBack;
    IBOutlet UIBarButtonItem *btnRestore;
    IBOutlet UINavigationItem *navBar;
    UIWebView *webView;
    NSIndexPath *tabIndex;
    NSString *htmlTemplate;
    int entry;
    id prevController;
}

@property (nonatomic, retain) IBOutlet UIWebView *webView;
@property (nonatomic, retain) IBOutlet UIBarButtonItem *btnBack;
@property (nonatomic, retain) IBOutlet UIBarButtonItem *btnRestore;
@property (nonatomic, assign) IBOutlet UINavigationItem *navBar;
@property (nonatomic, retain) NSString *htmlTemplate;
@property (nonatomic, retain) NSIndexPath *tabIndex;
@property (nonatomic, retain) id prevController;
@property (readwrite, assign) int entry;


- (DataModel *) dataModel;
- (IBAction) goBack: (id) sender;
- (IBAction) restore: (id) sender;

@end

Переключение должно происходить при нажатии элемента в listView:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)newIndexPath {
    ReviewDetailController *ctr = [[ReviewDetailController alloc] initWithNibName:@"ReviewDetailView" bundle:nil]; 
    ctr.tabIndex = newIndexPath;
    ctr.entry = [[[removedData objectAtIndex:newIndexPath.row] objectForKey:@"Entry"] intValue];
    ctr.prevController = self.tabBarController.selectedViewController;
    self.tabBarController.selectedViewController = ctr;
    [ctr release];
}

После init (первая строка) ctr выглядит хорошо:

ctr ReviewDetailController *    0x736f6c0 
tabIndex    NSIndexPath *   0x0
htmlTemplate    NSString *  0x0 
entry   int 0
prevController  id  0x0     

Один шаг по следующей строке должен установить tabIndex, но htmlTemplate изменился!

ctr ReviewDetailController *    0x736f6c0
tabIndex    NSIndexPath *   0x0
htmlTemplate    NSIndexPath *   0x752b2f0
entry   int 0
prevController  id  0x0

Следующая строка должна установить запись, но prevController получает значение (int 2) для записи:

ctr ReviewDetailController *    0x736f6c0
tabIndex    NSIndexPath *   0x0
htmlTemplate    NSIndexPath *   0x752b2f0 Variable is not a CFString
entry   int 0
prevController  id  0x2

Кроме того, следующая строка не устанавливает prevController, как ожидалось.

Как упоминалось ранее, этот код все еще работает на устройствах и симуляторах до iOS 5. Я уже пытался изменить порядок переменных, но безуспешно.Должно быть, что-то не так, но я не вижу, что.Поэтому я надеюсь, что кто-нибудь более опытный увидит и скажет мне, что делать.

1 Ответ

0 голосов
/ 08 ноября 2011

Проблема была в строке

self.tabBarController.selectedViewController = ctr;

В iOS5 больше не допускается замена контроллера представления для вкладки.Мне пришлось установить контроллер навигации на этой вкладке и выдвигать и выдвигать другие представления, а не менять контроллер вкладки (как определено в IB).

Я работал в этой проблеме, потому что у меня не было ни CrashReport, ни какой-либо консоливывод, когда я тестировал с iOS5.А с iOS4 проблемы не произошло.

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