Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode iOS主详细信息应用程序:定义协议、代理_Xcode_Delegates_Master Detail_Uistoryboard - Fatal编程技术网

Xcode iOS主详细信息应用程序:定义协议、代理

Xcode iOS主详细信息应用程序:定义协议、代理,xcode,delegates,master-detail,uistoryboard,Xcode,Delegates,Master Detail,Uistoryboard,在XCode 4.3.2中使用ARC、序列图像板的主细节应用程序模板中,我试图在选择主表视图中的项目时更具体地更改替换细节视图。我正在尝试为此实施委托/协议 我所困惑的是——哪个类应该实现协议中定义的方法——master还是detail 让细节视图实现协议方法对我来说是有意义的,因为我将根据通过协议方法从master以字符串形式传递的选择在细节视图中推/弹出视图控制器 这是我试过的 1在MasterViewController.h中定义了协议 @protocol MasterViewDelega

在XCode 4.3.2中使用ARC、序列图像板的主细节应用程序模板中,我试图在选择主表视图中的项目时更具体地更改替换细节视图。我正在尝试为此实施委托/协议

我所困惑的是——哪个类应该实现协议中定义的方法——master还是detail

让细节视图实现协议方法对我来说是有意义的,因为我将根据通过协议方法从master以字符串形式传递的选择在细节视图中推/弹出视图控制器

这是我试过的

1在MasterViewController.h中定义了协议

@protocol MasterViewDelegate <NSObject>
- (void)masterSelectionChanged:(NSString *)selection;
@end
@interface MasterViewController:UIViewContoller
@property (nonatomic, weak) id <MasterViewDelegate> delegate
#import "MasterViewController.m"
@interface DetailViewController:UINavigationController <MasterViewDelegate>
@end
详细信息请参见ViewController.h

@protocol MasterViewDelegate <NSObject>
- (void)masterSelectionChanged:(NSString *)selection;
@end
@interface MasterViewController:UIViewContoller
@property (nonatomic, weak) id <MasterViewDelegate> delegate
#import "MasterViewController.m"
@interface DetailViewController:UINavigationController <MasterViewDelegate>
@end

在这个过程中,在选择主表中的行时,什么都没有发生。没有崩溃,没有日志显示,在构建时也没有错误。我错过了什么

您需要设置delegate属性-此时它将为nil,因此在向它发送消息时不会发生任何事情。在iPad模板中,您可以在详图视图控制器的viewDidLoad中执行以下操作:

[super viewDidLoad];
if (self.splitViewController) // Means this won't be called if you use this code on iPhone too.
{
    // According to comments your master controller is embedded in a nav controller
    UINavigationController *nav = (UINavigationController*)[self.splitViewController.viewControllers objectAtIndex:0];
    // I am assuming it is the root view controller
    MasterViewController *master = (MasterViewController*)nav.rootViewController;
    // Finally set the delegate
    master.delegate = self;
}  

1你说的是iPad还是iPhone?主/详细模板在每一个模板中都非常不同2你是否在任何地方设置了委托属性,或者只是定义了它?@jrturton-我正在为iPad尝试这个。定义委托属性??也许这就是我错过的。我应该在哪里定义委托属性?我尝试了这个,但是协议中定义的方法仍然没有被调用。选中该行时,委托为零。如果在上面的“我的代码”中的分配之后记录master.delegate,会发生什么情况NSLog@master:%@代表:%@自我:%@,大师,大师。代表,自我;它显示-主人:代表:自我:啊!主视图控制器嵌入在导航控制器中。你需要得到一个指向实际控制器本身的指针——大概是导航控制器?@jrjurton的rootViewController——我在这里也使用了这个解决方案,效果也不错