我正在使用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方法吧?
答案 0 :(得分:0)
你的功能
-(void)pushModuleTitle:(double)moduleTitile
接受一个参数,但是您在没有参数的情况下调用它。没有函数存在零参数!您需要将通话更改为
[master pushModuleTitle:5.0]; // for example
或添加
-(void)pushModuleTitle
答案 1 :(得分:0)
您实际上是在创建一个 new MasterViewController实例,而不是引用现有实例。
您需要做的是访问SplitViewController实例并请求objectAtIndex:0(左侧)。这个对象就是你要找的。 p>
//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或头文件),其他对象可以了解它们可以向对象发送的消息。如果您按照上面的答案,您可以看到从一个对象到下一个对象的路径:
splitViewController
属性(UISplitViewController)viewControllers
属性(NSArray)objectAtIndex:0
(返回splitView的左侧)