1

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

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

这是我的方法MasterViewController.m

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

不知道为什么我会遇到这个问题!这就是你调用 e 方法的方式对吗?

4

2 回答 2

0

您实际上是在创建一个的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 这样的面向对象语言中,我们有一个术语叫做“封装”。一个对象在设计上不知道其他对象。通过使用对象的接口(.h 或头文件),其他对象可以了解它们可以向您的对象发送哪些消息。如果您按照上面的答案,您可以看到从一个对象到下一个对象的路径:

  1. 向 ViewController 询问它的splitViewController属性 (UISplitViewController)
  2. 向 splitViewController 询问它的viewControllers属性 (NSArray)
  3. 请求 viewControllers 数组给你objectAtIndex:0(返回 splitView 的左侧)
于 2013-05-14T17:59:49.950 回答
0

你的功能

   -(void)pushModuleTitle:(double)moduleTitile

接受一个参数,但您调用它时不带任何参数。不存在采用零参数的函数!您要么需要将呼叫更改为

  [master pushModuleTitle:5.0]; // for example

或添加

  -(void)pushModuleTitle 
于 2013-05-14T17:55:29.257 回答