我在构建应用程序时遇到问题。我试图在我当前的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];
它不起作用,我已经尝试修复它一段时间了。任何帮助都会很棒。谢谢
答案 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];