Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法从第二个ViewController调用方法_Ios_Objective C_Iphone_Xcode_Ipad - Fatal编程技术网

Ios 无法从第二个ViewController调用方法

Ios 无法从第二个ViewController调用方法,ios,objective-c,iphone,xcode,ipad,Ios,Objective C,Iphone,Xcode,Ipad,我在构建应用程序时遇到问题。我正在尝试从当前ViewController2中的ViewController1调用方法 在ViewController1的.h文件中,我声明了该方法,使其可见 -(void)saveLocation; 在我的ViewController2.h文件中,我有以下内容 #import "ViewController1.h" @interface ViewController2 : UIViewController @property (nonatomic

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

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

-(void)saveLocation;
在我的ViewController2.h文件中,我有以下内容

    #import "ViewController1.h"



@interface ViewController2 : UIViewController

@property (nonatomic,assign) ViewController1 *MethodSave;

@end
在我的视图中,控制器2.m

[self.MethodSave saveLocation];

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

我想您只声明了一个属性@property非原子,分配ViewController1*MethodSave;但是没有分配这个财产。所以首先分配它,然后调用函数

MethodSave = [ViewController1 new];
[self.MethodSave saveLocation];
还将属性声明为strong not assign@property nonatomic,strong ViewController1*MethodSave;这应该行得通


并尝试使用驼峰大小写声明变量。

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

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

在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删除导入

我是靠记忆来做的,所以它可能无法复制和粘贴,但希望这能为您指明正确的方向。

试试这个

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

这里有一个输入错误@property nonatomic,assign ViewController1*MethodSave;MethodSave似乎是一个类名,因此与之冲突。尝试用其他名称更改它。它实际上被称为WeatherMethodSave,我得到的错误是“未知类型名称”ViewController1,我已导入该类?您需要使用委派,通过此分配用于基本变量int,BOOL。对于目标C变量,使用强或弱。我不知道这是否是问题所在。尝试更改它。您确定类的拼写正确吗:ViewController1.h?在创建并导入该类后是否重命名了该类?它仍然会给我相同的错误,ViewController1是未知的类型名。我可能没有正确导入。在ViewController2中,我导入了ViewController1。我想这就是我所需要的吗?@Burggg我已经更新了我的答案,请再试一次,如果有任何问题,请告诉我。