Objective c 尝试返回数组时出现奇怪的警告

Objective c 尝试返回数组时出现奇怪的警告,objective-c,Objective C,希伊 当我试图返回一个数组时,我总是收到这个奇怪的“警告”消息,但它不会中断我的应用程序 从结果类型为'ABRecordRef'(aka'const void*)的函数返回'ABRecordRef'(aka'const void*)将丢弃限定符 这是我收到这条信息的代码 - (ABRecordRef *) findContactsContainingName: (NSString *) fname { //TODO: add lastname, phonenumber etc.

希伊

当我试图返回一个数组时,我总是收到这个奇怪的“警告”消息,但它不会中断我的应用程序

从结果类型为'ABRecordRef'(aka'const void*)的函数返回'ABRecordRef'(aka'const void*)将丢弃限定符

这是我收到这条信息的代码

- (ABRecordRef *) findContactsContainingName: (NSString *) fname
{
    //TODO: add lastname, phonenumber etc.

    // Load the contacts
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, nil);
    NSArray *thePeople = (__bridge NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);

    for (id person in thePeople){
        NSString *firstname = (__bridge NSString*) ABRecordCopyValue((__bridge ABRecordRef)(person), kABPersonFirstNameProperty);
        if([firstname isEqualToString: fname]){
            return (__bridge ABRecordRef)(person);
        }
    }

    return NULL;
}
有人能解释一下我为什么来这里吗


感谢您的帮助和快速回答

在此处删除
*

- (ABRecordRef *) findContactsContainingName: (NSString *) fname
               ^

ABRecordRef
已定义为指针。

删除
*
此处:

- (ABRecordRef *) findContactsContainingName: (NSString *) fname
               ^

ABRecordRef
已经定义为指针。

ABRecord
是C API,它以CoreFoundation方式工作

在CoreFoundation(和AddressBook)中,对象被实现为C结构,指针被用来引用它们。CoreFoundation中的一个字符串是“代码> CFString Ref< /Color >,它与基础对象是可互换的(或更确切地说,是免费的桥接),<代码> NString *< /COD>。(也就是说,
CFStringRef
中的“
Ref
”暗示了其中的一个
*
——将其视为
CFString*
,或者更确切地说是
struct\ucfstring*

类似地,
ABRecordRef
ABRecord*
,因此您的返回类型,
ABRecordRef*
实际上是
ABRecord**
,一个辅助指针。这就是编译器所抱怨的


您可以查看gnustepcorebase的源代码,并找出原因。GNUstep是Cocoa(它早于Cocoa!)在Linux上的开源克隆,研究它的源代码对于理解Cocoa是如何工作的非常有帮助。

ABRecord是C API,它以CoreFoundation的方式工作

在CoreFoundation(和AddressBook)中,对象被实现为C结构,指针被用来引用它们。CoreFoundation中的一个字符串是“代码> CFString Ref< /Color >,它与基础对象是可互换的(或更确切地说,是免费的桥接),<代码> NString *< /COD>。(也就是说,
CFStringRef
中的“
Ref
”暗示了其中的一个
*
——将其视为
CFString*
,或者更确切地说是
struct\ucfstring*

类似地,
ABRecordRef
ABRecord*
,因此您的返回类型,
ABRecordRef*
实际上是
ABRecord**
,一个辅助指针。这就是编译器所抱怨的


您可以查看gnustepcorebase的源代码,并找出原因。GNUstep是Cocoa(它早于Cocoa!)在Linux上的开源克隆,研究它的源代码对于理解Cocoa如何在引擎盖下工作非常有帮助。

我想这是因为您的
返回NULL
@gasparuff nope it notOk,那么可能是因为如果
*
,,正如Martin R已经回答的那样。我猜这是因为您的
返回NULL
@gasparuff no it notOk,那么可能是因为如果
*
,正如Martin R已经回答的那样。但是请注意,您的代码中存在一些“潜在泄漏”。您应该运行“产品->分析”@明格巴格:你为什么不先自己试试呢?运行“产品->分析”。如果你点击蓝色小图标,你会得到一份关于这个问题的详细报告如果你根本无法修复它,我会帮助你(-:但是请注意,你的代码中有一些“潜在的漏洞”。你应该运行“产品->分析”!@Mingebag:你为什么不先自己试试呢?运行“产品->分析”。如果您单击蓝色小图标,您将获得有关问题的详细报告。-如果您根本无法解决问题,我将帮助您(-: