在DetailViewController上调用MasterViewController的方法

时间:2013-05-14 17:52:23

标签: objective-c uisplitviewcontroller ipad

我正在使用SplitViewController制作一个小型iPad APP,我想通过MasterViewController上的DetailViewController调用一种方法,但该方法无法显示当我编写以下代码来调用它时:

MasterViewController *master = [[MasterViewController alloc]init];
[master pushModuleTitle];

以下是MasterViewController.m

中的方法
-(void)pushModuleTitle:(NSString*)moduleTitile
{
    NSString * moduleTitileObject = moduleTitile;
    [self.moduleTitleStack addObject:moduleTitileObject];
}

不确定我为什么会遇到这个问题!你怎么称呼e方法吧?

2 个答案:

答案 0 :(得分:0)

你的功能

   -(void)pushModuleTitle:(double)moduleTitile

接受一个参数,但是您在没有参数的情况下调用它。没有函数存在零参数!您需要将通话更改为

  [master pushModuleTitle:5.0]; // for example

或添加

  -(void)pushModuleTitle 

答案 1 :(得分:0)

您实际上是在创建一个 new MasterViewController实例,而不是引用现有实例。

您需要做的是访问SplitViewController实例并请求objectAtIndex:0(左侧)。这个对象就是你要找的。

//in detailView.m



//accesses the splitViewController property on the viewController class. User @rdelmar clarified that iOS sets this property automatically

UISplitViewController *split = self.splitViewController; 
//UISplitViewController will return an array if you access the viewControllers property. Ask the array for the first object. This object is the left hand object.
MasterViewController *master = (MasterViewController *)[split.viewControllers objectAtIndex:0];
[master pushModuleTitle:@"Master"];

编辑:进一步说明

在Objective-C这样的面向对象语言中,我们有一个名为“Encapsulation”的术语。对象不会通过设计了解其他对象。通过使用对象的接口(.h或头文件),其他对象可以了解它们可以向对象发送的消息。如果您按照上面的答案,您可以看到从一个对象到下一个对象的路径:

  1. 向ViewController询问它的splitViewController属性(UISplitViewController)
  2. 向splitViewController询问它的viewControllers属性(NSArray)
  3. 让viewControllers数组给你objectAtIndex:0(返回splitView的左侧)