0

ある TabBarViewController から MasterViewController にデータを戻そうとしていますが、データを MasterViewController に戻そうとすると、プロトコル/デリゲートのメソッドにアクセスできません。

これは私がやったことです-私はTabBarViewcontrollerとMasterViewControllerを持っています.TabBarControllerはサブビューとしてMasterViewControllerに追加されます...私がやろうとしているのは、別のサブビューをMasterViewControllerにロードすることです。 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;
    //..

MasterViewController.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 に答える