我有一个类RootViewController
获取属性在那里我有声明的UIBarButtonItem
。的方法,以显示它是在另一个类FirstDetailViewController
。无法从另一个类
我试图访问它在另一个类SecondDetailViewController
,但它始终是零。我测试了一些其他变量,它们也是空的。下面是我有:
RootViewController.h
@interface RootViewController : UITableViewController <UISplitViewControllerDelegate> {
}
@property (nonatomic, retain) UIBarButtonItem *rootPopoverButtonItem;
...
@end
RootViewController.m
#import "RootViewController.h"
#import "FirstDetailViewController.h"
@implementation RootViewController
@synthesize popoverController, splitViewController, rootPopoverButtonItem;
- (void)splitViewController:(UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController:(UIPopoverController*)pc {
NSLog(@"splitviewController will hide");
// Keep references to the popover controller and the popover button, and tell the detail view controller to show the button.
barButtonItem.title = @"Menu";
self.popoverController = pc;
self.rootPopoverButtonItem = barButtonItem;
UIViewController <SubstitutableDetailViewController> *detailViewController = [splitViewController.viewControllers objectAtIndex:1];
[detailViewController showRootPopoverButtonItem:rootPopoverButtonItem];
}
FirstDetailViewController.m
- (void)showRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem {
NSLog(@"show root popover button item");
// Add the popover button to the toolbar.
NSMutableArray *itemsArray = [toolbar.items mutableCopy];
[itemsArray insertObject:barButtonItem atIndex:0];
[toolbar setItems:itemsArray animated:NO];
[itemsArray release];
}
SecondDetailViewController.h
#import "RootViewController.h"
@class RootViewController;
@interface SecondDetailViewController : UIViewController <SubstitutableDetailViewController, UIScrollViewDelegate, UITextFieldDelegate, UITextViewDelegate> {
...
}
@property (nonatomic, retain) RootViewController *root;
@end
SecondDetailViewController.m
#import "SecondDetailViewController.h"
@implementation SecondDetailViewController
@synthesize root;
...
NSLog(@"view class : %@", [root.splitViewController class]);
[detailViewController showRootPopoverButtonItem:root.rootPopoverButtonItem];
...
你在哪儿SecondDetailViewController声明detailViewController? – 2012-07-19 18:13:11
添加一个断言来验证barButtonItem不是无 - (void)splitViewController :(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem :(UIBarButtonItem *)barButtonItem forPopoverController :(UIPopoverController *)pc同样assert(root )在你的SecondDetailViewController。使用大量的资产可以帮助你自己发现这些问题。 – 2012-07-19 18:17:20
只是猜测,你没有设置酒吧按钮项目,然后再尝试访问它。 – Dustin 2012-07-19 18:36:21