我对GCD比较新,我目前正在使用它在我的应用程序中创建一个单例对象。经过一些研究后我发现使用GCD的dispatch_once()方法是实现单例设计模式的最佳方法。出于某种原因,我的代码是破碎的,我无法弄清楚我的生活。下面,我已经粘贴了我的单例创建/初始化代码和响应错误。
+(id)sharedErrorMapper {
static dispatch_once_t onceToken;
static id sharedInstance;
dispatch_once(&onceToken, ^
{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
-(id)init {
//creating the ErrorMap data structure
//currently loading in dummy JSON data..
self = [super init];
if (self != nil) {
NSError *error = [[NSError alloc] init];
NSData *resourceData = [[NSData alloc] initWithContentsOfFile:
@"/Users/acuram/Desktop/GitHubWorkspaces/ios-sdk-src/ios-here-sdk/PPHSDKTests/Resources"];
self.errorMap = [[NSDictionary alloc] init];
self.errorMap = [NSJSONSerialization JSONObjectWithData:resourceData options:kNilOptions error:&error];
}
return self;
}
设置一些断点并进行一些堆栈跟踪后,我的代码在dispatch_once()函数调用中断开。我得到的错误是" NSInvalidArgumentException",它抱怨我的数据参数是nil。我非常震惊,因为我在youtube上关注了一个合法的教程视频来实现这一点,我也在查看我的公司代码库,他们似乎以类似的方式做到了....