Objective c 如果CFDictionaryRef不存在,则崩溃
我有一个问题,当断开以太网电缆从计算机或刚刚关闭以太网。在这种情况下,某些入口不存在,我的应用程序将崩溃。 因此,我试图找出如何防止,只是找到了CFDictionaryContainsKey,但这并不能防止错误。有谁知道一个比osx 10.6更低的工作环境吗Objective c 如果CFDictionaryRef不存在,则崩溃,objective-c,macos,Objective C,Macos,我有一个问题,当断开以太网电缆从计算机或刚刚关闭以太网。在这种情况下,某些入口不存在,我的应用程序将崩溃。 因此,我试图找出如何防止,只是找到了CFDictionaryContainsKey,但这并不能防止错误。有谁知道一个比osx 10.6更低的工作环境吗 如果“State:/Network/Global/IPv4”不存在,则应用程序会崩溃:(我想您只需要检查dr==NULL,如果是,则中止。如果这有点明显,请道歉,但您没有在这里这样做,似乎它可以避免崩溃。作为各州的文档: 返回值:与指定键关
如果“State:/Network/Global/IPv4”不存在,则应用程序会崩溃:(我想您只需要检查dr==NULL,如果是,则中止。如果这有点明显,请道歉,但您没有在这里这样做,似乎它可以避免崩溃。作为各州的文档: 返回值:与指定键关联的值,如果找不到值或发生错误,则为NULL。必须释放返回值
CFDictionaryContainsKey()
尝试检查传入的字典;如果它为空,则会导致空指针取消引用而崩溃。也不应CFRelease()
使用空指针
要更正此问题,只需在调用CFDictionaryContainsKey()
之前添加一个空检查
如何调用
CFDictionaryContainsKey
?Boolean ck=CFDictionaryContainsKey(dr,CFSTR(“主界面”))
它可以检测密钥,但不能检测字典本身,或者?您可以编辑您的问题,以包含您使用CFDictionaryContainsKey
的完整示例吗?CFDictionaryContainsKey
在这里没有意义,因为如果字典不存在,密钥就不存在。那么如何检查字典是否存在。:/在某个测试中,我尝试了这一点,但没有起作用,可能是因为我的位置错误。换句话说,你可以释放现有的东西。嗯?
- (NSString *)checkNetworkInterface
{
SCDynamicStoreRef ds = SCDynamicStoreCreate(kCFAllocatorDefault, CFSTR("myapp"), NULL, NULL);
CFDictionaryRef dr = SCDynamicStoreCopyValue(ds, CFSTR("State:/Network/Global/IPv4"));
Boolean ck = CFDictionaryContainsKey( dr, CFSTR("PrimaryInterface"));
NSString *interfaceString;
if (ck) {
CFStringRef interface = CFDictionaryGetValue(dr, CFSTR("PrimaryInterface"));
interfaceString = [NSString stringWithString:( NSString *)interface ];
} else {
interfaceString = [NSString stringWithString:@"" ];
}
CFRelease(dr);
CFRelease(ds);
return interfaceString;
}
NSString *interfaceString;
if(dr != NULL && CFDictionaryContainsKey(dr, CFSTR("PrimaryInterface")))
{
CFStringRef interface = CFDictionaryGetValue(dr, CFSTR("PrimaryInterface"));
...
CFRelease(dr);
}