我不明白以下警告:
不兼容的指针类型将'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 **),但如果我这样做,我会得到很多错误。
发生了什么事?
答案 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 **。这取决于最适合您项目要求的内容。