我的应用在iOS 5下有一个奇怪的行为

时间:2011-10-17 04:38:54

标签: xcode variables

我目前正在使用最新版本的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 :(得分:0)

问题在于

self.tabBarController.selectedViewController = ctr;

在iOS5中,不再允许更改选项卡的视图控制器。我必须在此选项卡上安装导航控制器,然后按下并弹出其他视图,而不是更改选项卡的控制器(如IB中所定义)。

我正在运行这个问题,因为我在使用iOS5测试时没有CrashReport或任何控制台输出。 iOS4的问题并没有发生。