Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.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
Objective c 如果CFDictionaryRef不存在,则崩溃_Objective C_Macos - Fatal编程技术网

Objective c 如果CFDictionaryRef不存在,则崩溃

Objective c 如果CFDictionaryRef不存在,则崩溃,objective-c,macos,Objective C,Macos,我有一个问题,当断开以太网电缆从计算机或刚刚关闭以太网。在这种情况下,某些入口不存在,我的应用程序将崩溃。 因此,我试图找出如何防止,只是找到了CFDictionaryContainsKey,但这并不能防止错误。有谁知道一个比osx 10.6更低的工作环境吗 如果“State:/Network/Global/IPv4”不存在,则应用程序会崩溃:(我想您只需要检查dr==NULL,如果是,则中止。如果这有点明显,请道歉,但您没有在这里这样做,似乎它可以避免崩溃。作为各州的文档: 返回值:与指定键关

我有一个问题,当断开以太网电缆从计算机或刚刚关闭以太网。在这种情况下,某些入口不存在,我的应用程序将崩溃。 因此,我试图找出如何防止,只是找到了CFDictionaryContainsKey,但这并不能防止错误。有谁知道一个比osx 10.6更低的工作环境吗


如果“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);
}