使用指向指针和NSError的指针获取警告

时间:2014-06-24 15:34:36

标签: objective-c

我不明白以下警告:

不兼容的指针类型将'NSError * __ strong *'发送到'NSString * __ autoreleasing *'

类型的参数

抛出它的方法是

BSSPhoneNumberFormatter *formatter = [[BSSPhoneNumberFormatter alloc] init];
NSString *tmp = self.dtlPhnNbr.text;
id objectValue;
NSError *error;
[formatter getObjectValue:&objectValue forString:tmp errorDescription:&error];

最后一行有警告。

BSSPhoneNumberFormatter的h文件是

#import <Foundation/Foundation.h>

@interface BSSPhoneNumberFormatter : NSFormatter

@end

方法是

- (BOOL)getObjectValue:(id *)anObject forString:(NSString *)string errorDescription:(NSString **)error {
    *anObject = (id)[self stripNonDigits:string];
    return YES;
}

我知道(NSString **)错误是指向指针的指针。一个不同的帖子说要在调用的方法和调用方法中用(NSString *)替换(NSString **),但如果我这样做,我会得到很多错误。

发生了什么事?

1 个答案:

答案 0 :(得分:5)

方法中的最后一个参数:

- (BOOL)getObjectValue:(id *)anObject forString:(NSString *)string errorDescription:(NSString **)error

errorDescription:(NSString **)error

是指向NSString的指针,但您传递的是NSError。 将通话更改为:

NSString *error; <-- Change object type to NSString here
[formatter getObjectValue:&objectValue forString:tmp errorDescription:&error];

您也可以替换方法来接受NSError **作为参数而不是NSString **。这取决于最适合您项目要求的内容。