私のアプリにはタブバーコントローラがあり、タブアイテムの1つはスプリットビューコントローラです。マスタービューコントローラ(つまり、インデックス0)は、カスタムナビゲーションバーのため、ペン先からロードされたナビゲーションコントローラです。メモリ不足の警告が表示されるのはなぜですか?
これはちょっとあいまいですが、1)IBのTBCにSVCを追加できない、2)iOS 4.2 splitview-navbar-colorTintバグの組み合わせになります。そして、実際には、昨日回避策を実装して以来、私はメモリ不足の警告で問題が発生しています。
回避策の前に、私は2つのnavコントローラを使ってSVCを組み込み、TBCにプログラム的に(IBのタブバーによる制限のために)、問題がなくても問題なく - よく、そのリンゴのバグを除いていました。
小さなworkaround demoもメモリ不足の警告があっても正常に動作します。ただし、タブバーのオーバーヘッドが増えることはありません。
しかし、my adaption of the workaround demoではすべてが梨の形になり始めます。スプリットビューを表示している間にメモリ不足の警告を送信すると、左側(マスタービュー)全体が消えます。デバイス上での動作が同じで、実際には最初にそれを発見しました。
私は何が起こっているのか困惑しています。表示されるビュー(nav contのルートビュー)は、テーブルビューサブクラスによって制御されます。私はdidReceiveMemoryWarningをオーバーライドしましたが、それは助けになりません。さらに(対応して!)、スーパービューはゼロではありません。それはUITableViewです。完璧に正しい。
だから、私はnavコントローラがリリースされていると思っていますか?しかしここで?元のデモではなぜですか?違いは、私のタブバーコントローラの追加です。タブバーに追加するコードは次のとおりです。
- (void) addTabItemSplitViewWithNavConRoot:(BOOL)hasRootNC {
// init master/detail views
SV1RootViewController *rvc = [[SV1RootViewController alloc] initWithNibName:@"SVC1RootView" bundle:nil];
SV1DetailViewController *dvc = [[SV1DetailViewController alloc] initWithNibName:@"SVC1DetailView" bundle:nil];
rvc.detailViewController = dvc;
UINavigationController *nc = nil;
if (hasRootNC) {
nc = [self.pSVC1.viewControllers objectAtIndex:0];
nc.viewControllers = [NSArray arrayWithObjects:rvc, nil];
nc.navigationBar.tintColor = [UIColor redColor];
} else {
nc = nil;
}
UIViewController *vc = (hasRootNC)? (UIViewController*)nc :rvc;
UISplitViewController *svc = [self newSplitViewControllerWithMasterVC:vc detailVC:dvc];
svc.delegate = dvc;
// init the tab bar item
svc.tabBarItem = [[UITabBarItem alloc] initWithTitle:(hasRootNC)? @"SplitView with Nav Root":@"Simple SplitView"
image:nil
tag:0];
// int the split view
NSMutableArray *controllersArray = [NSMutableArray arrayWithArray:self.pTabBarController.viewControllers];
[controllersArray addObject:svc];
[self.pTabBarController setViewControllers:controllersArray];
// cleanup
[nc release];
[rvc release];
[dvc release];
[svc release];
}
- (UISplitViewController*) newSplitViewControllerWithMasterVC:(UIViewController*)masterView
detailVC:(UIViewController*)detailView {
UISplitViewController *svc = [[UISplitViewController alloc] init];
NSMutableArray *controllersArray = [NSMutableArray arrayWithObjects:masterView, detailView, nil];
[svc setViewControllers:controllersArray];
return svc;
}
私のためにアイデアはありますか? :)
それは私を狂ってしまう!
コードを再フォーマットしてください。 – Joe