0

我正在尝试将数据从一个 TabBarViewController 传递回我的 MasterViewController 但是当试图将数据传递回 MasterViewController 时,我的协议/委托的方法永远不会被访问。

这就是我所做的 - 我有一个 TabBarViewcontroller 和一个 MasterViewController,TabBarController 作为一个子视图添加到 MasterViewController ...我要做的是然后将另一个子视图加载到 MasterViewController 上,我打算在一个 tabbarbutton 时做在 tabBarViewController 中选择我调用我的协议/委托方法。为此,我使用以下代码。(我希望到目前为止这是有道理的)

TabBarViewController.h

@class MasterViewController;

@protocol LoadActionView <NSObject>
@required
- (void) loadViewsAction;
@end

@interface TabBarViewController : UIViewController <UITabBarDelegate> {


    __weak id <LoadActionView> delegate;

//..
}

@property (weak, nonatomic) id delegate;

//..

TabBarViewController.m

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
    switch (item.tag) {
        case 0:
        {
             NSLog(@"item 1 selected");
            [[self delegate] loadViewsAction]; //the thread defiantly makes it here as I have debugged to this point
        }
//..

然后,MasterViewController.h

 #import <UIKit/UIKit.h>
    #import "TabBarViewController.h"

    @interface MasterViewController : UIViewController <UINavigationControllerDelegate, LoadActionView> {


TabBarViewController *tbVC;

}

@property (nonatomic, strong) TabBarViewController *tbVC;
    //..

主视图控制器.m

#import "TabBarViewController.h"

@synthesize tbVC;
    //..

- (void) viewDidLoad {
//..

tbVC = [[TabBarViewController alloc] initWithNibName:@"TabBarViewController" bundle:[NSBundle mainBundle]];
    UIView *tbView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 367.0, 320.0, 49.0)];
    [tbView addSubview:tbVC.view];
    [otherNav.view addSubview:tbView];


}

    - (void) loadViewsAction
    {
        NSLog(@"HITME!"); //threads not making it here.
    }

与我通常在这里做的唯一不同的是,这个 TabBarViewController 被添加为子视图。所以如果这把事情搞砸了,我会很伤心。但如果是这样,我不知道如何修复......

任何帮助将不胜感激。

4

1 回答 1

1

您可以通过添加以下内容来调试问题:

NSAssert (nil != [self delegate]);

就在调用loadViewsAction. 该断言将失败,因为您尚未分配 TabBarController 的委托。创建 TabVarController 后,执行:

tbVS.delegate = self;

然后,您将拥有一个用于 loadViewsAction 的委托。

于 2012-06-06T03:30:40.863 回答