В настоящее время я использую последнюю версию 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. Я уже пытался изменить порядок переменных, но безуспешно.Должно быть, что-то не так, но я не вижу, что.Поэтому я надеюсь, что кто-нибудь более опытный увидит и скажет мне, что делать.