Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.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 单例中的委托模式不起作用_Ios_Objective C_Delegates_Singleton - Fatal编程技术网

Ios 单例中的委托模式不起作用

Ios 单例中的委托模式不起作用,ios,objective-c,delegates,singleton,Ios,Objective C,Delegates,Singleton,20140115更新:使用工作代码 我有一个要使用委托模式的单例。当我与委托一起调用methode时,我没有得到通知 我的错误在哪里?如何使委托模式与didComposition? 下面是我的调试器和代码,其中重要的部分包括: 调试器 h-具有委托模式的Singleton #导入“AFHTTPRequestOperationManager.h” @类WebApi; @协议代理 -(无效)构成; @结束 @接口WebApi:AFHTTPRequestOperationManager @属性(赋值,

20140115更新:使用工作代码

我有一个要使用委托模式的单例。当我与委托一起调用methode时,我没有得到通知

我的错误在哪里?如何使委托模式与
didComposition

下面是我的调试器和代码,其中重要的部分包括:

调试器 h-具有委托模式的Singleton
#导入“AFHTTPRequestOperationManager.h”
@类WebApi;
@协议代理
-(无效)构成;
@结束
@接口WebApi:AFHTTPRequestOperationManager
@属性(赋值,非原子)id委托;
+(WebApi*)共享状态;
-(空)沙箱;
-(无效)周围成分;
@结束
WebApi.m
#导入“WebApi.h”
#定义kApiHost@“http://192.168.0.1"  
@WebApi的实现
-(WebApi*)initWithBaseURL:url{
self=[super init];
如果(self!=nil){}
回归自我;
}
#pragma-mark-Singleton方法
+(WebApi*)共享状态
{
静态WebApi*sharedInstance=nil;
静态调度一次预测;
一次发送(一次预测)^{
sharedInstance=[[self alloc]initWithBaseURL:[NSURL URLWithString:kApiHost]];
});
返回共享状态;
}
-(空)沙箱{
DLog(@“称为沙箱”);
//做一些网络方面的事情
}
-(无效)周围成分{
[自我沙盒];
DLog(“do环绕合成”);
[self.delegate performSelector:@selector(didComposition)];
}
@结束
SurroundViewController.h
#导入
#导入“Lokation.h”
#导入“WebApi.h”
@界面SurroundViewController:UICollectionViewController
@性质(强,非原子)Lokation*Lokation;
@结束
SurroundViewController.m(使用工作代码更新)
#导入“SurroundViewController.h”
#导入“SWRevealViewController.h”
@接口SurroundViewController()
@结束
@实现SurroundViewController
-(id)init
{
self=[super init];
如果(自我){
//自定义初始化
self.lokation=[[lokation alloc]init];
self.lokation.delegate=self;
[self.lokation getLocation];
}
回归自我;
}
-(无效)viewDidLoad
{
[超级视图下载];
[WebApi sharedInstance]。委托=self;
[[WebApi sharedInstance]DosUroundComposition];
}
-(无效)构成{
DLog(@“did load composition”);//将不被调用!
}
@结束

当您第一次调用
[WebApi sharedInstance]
时,需要将委托设置为某个值。当前(在您显示的代码中)未设置任何委托。因此,当共享实例尝试调用委托时,它只是一个禁止操作。

当您第一次调用
[WebApi sharedInstance]
时,您需要将委托设置为某个值。当前(在您显示的代码中)未设置任何委托。因此,当共享实例尝试调用委托时,它只是一个禁止操作。

谢谢<代码>[WebApi sharedInstance]。委托=self解决了我的问题。谢谢<代码>[WebApi sharedInstance]。委托=self确实解决了我的问题。如果不将对象设置为委托,您希望如何调用它。此外,由于您的协议方法没有标记为必需,因此在调用它之前,您确实应该检查委托是否实现了协议方法-否则可能会发生崩溃。@Abizern有时您看不到树中有木。因此,再次排队,清除大脑周围的迷雾是很有帮助的。没有人总是十全十美的。这不是“以木换木”的问题。未调用委托方法。想到的第一件事是“我是否设置了有效的委托?”想到的第二件事是“我是否真的向我的委托发送了消息?”第三件事是“让我在代码中设置一些断点,并跟踪执行,以查看我预期的情况是否真的发生了”。这不是关于完美,而是关于遵循基本步骤来解决您自己的问题。我敢打赌@Wain做的第一件事就是查看您的代码,查找您设置委托对象的行。@Abizern这很好。我有一个稍微不同的观点。但这与此无关。如果不将对象设置为委托,您希望如何调用它。此外,由于您的协议方法没有标记为必需,因此在调用它之前,您确实应该检查委托是否实现了协议方法-否则可能会发生崩溃。@Abizern有时您看不到树中有木。因此,再次排队,清除大脑周围的迷雾是很有帮助的。没有人总是十全十美的。这不是“以木换木”的问题。未调用委托方法。想到的第一件事是“我是否设置了有效的委托?”想到的第二件事是“我是否真的向我的委托发送了消息?”第三件事是“让我在代码中设置一些断点,并跟踪执行,以查看我预期的情况是否真的发生了”。这不是关于完美,而是关于遵循基本步骤来解决您自己的问题。我敢打赌@Wain做的第一件事就是查看您的代码,查找您设置委托对象的行。@Abizern这很好。我有一个稍微不同的观点。但这与此无关。
2014-01-15 14:31:09.703 Foobar[5854:70b] -[WebApi sandbox] [Line 42] Sandbox call
2014-01-15 14:31:09.707 Foobar[5854:70b] -[WebApi getSurroundStream] [Line 67] Surround Stream call