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

Bry*_*ler 2 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];
Run Code Online (Sandbox Code Playgroud)

最后一行有警告.

BSSPhoneNumberFormatter的h文件是

#import <Foundation/Foundation.h>

@interface BSSPhoneNumberFormatter : NSFormatter

@end
Run Code Online (Sandbox Code Playgroud)

而且方法是

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

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

到底是怎么回事?

Gre*_*reg 5

方法中的最后一个参数:

- (BOOL)getObjectValue:(id *)anObject forString:(NSString *)string errorDescription:(NSString **)error
Run Code Online (Sandbox Code Playgroud)

errorDescription:(NSString **)error
Run Code Online (Sandbox Code Playgroud)

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

NSString *error; <-- Change object type to NSString here
[formatter getObjectValue:&objectValue forString:tmp errorDescription:&error];
Run Code Online (Sandbox Code Playgroud)

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