无法从第二个ViewController调用方法

时间:2014-10-08 14:05:58

标签: ios objective-c iphone xcode ipad

我在构建应用程序时遇到问题。我试图在我当前的ViewController2中调用ViewController1中的方法。

在ViewController1的.h文件中,我声明了方法,使其可见。

-(void)saveLocation;

在我的ViewController2.h文件中,我有以下

    #import "ViewController1.h"



@interface ViewController2 : UIViewController

@property (nonatomic,assign) ViewController1 *MethodSave;

@end

和我的ViewController2.m

[self.MethodSave saveLocation];

它不起作用,我已经尝试修复它一段时间了。任何帮助都会很棒。谢谢

3 个答案:

答案 0 :(得分:0)

我认为您只声明了属性@property (nonatomic,assign) ViewController1 *MethodSave;,但尚未分配此属性。所以先分配它然后调用函数。

MethodSave = [ViewController1 new];
[self.MethodSave saveLocation];

还声明该属性为strong而不是@property (nonatomic,strong) ViewController1 *MethodSave;这应该有效。

并尝试用camel case声明变量。

答案 1 :(得分:0)

您是否还在ViewController1中导入ViewController2? 根据我自己的谷歌搜索,你的问题可能是循环依赖。

如果是这种情况,则不要在ViewController2中导入ViewController1,而是在ViewController2.h中创建一个协议,并将ViewController1属性替换为符合该协议的id。

在ViewController2.h中添加以下内容:

@protocol ViewController2Delegate<NSObject>
@required
-(void)saveLocation;
@end

@interface ViewController2:UIViewController
@property id<ViewController2Delegate> *delegate;
@end

并将其添加到ViewController1.h:

@interface ViewController1:UIViewController <ViewController2Delegate>

然后将委托设置为ViewController1的实例(如果您从ViewController1加载ViewController2,它将是self),并确保从ViewController2中删除导入。

我是通过记忆这样做的,所以它可能无法复制和粘贴,但希望这会指向正确的方向。

答案 2 :(得分:0)

试试这个,

ViewController1 *MethodSave = [[ViewController1 alloc]init];
[MethodSave saveLocation];