【问题标题】:Getting warning with a pointer to a pointer and NSError使用指向指针和 NSError 的指针获取警告
【发布时间】:2014-06-24 15:34:35
【问题描述】:

我不明白以下警告:

不兼容的指针类型将“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];

最后一行有警告。

BSSShoneNumberFormatter 的 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 **),但是如果我这样做,我会遇到严重错误。

发生了什么事?

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    方法中的最后一个参数:

    - (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**。这取决于什么最适合您的项目要求。

    【讨论】:

    • 我现在明白了。有点愚蠢的错误。谢谢,现在完美运行。
    猜你喜欢
    • 1970-01-01
    • 2019-01-03
    • 2013-04-08
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多