1

API にヒットするクライアントを作成しています。APIはこれを吐き出します:

Id: 33,
UserUrl: "https://example.com/username/profile",
Title: "I wanna give 'em the holy boot!",
IsOnline: "no"

JSON を NSDictionary として使用し、setValuesForKeysWithDictionary: を使用して User オブジェクトに変換します。私の User.m には、着信 UserUrl 文字列を受け取り、次のように NSURL に曲げるカスタム セッターがあります。

- (void)setUserUrl:(NSString *)stringInput  {
    _UserUrl = [NSURL URLWithString:stringInput];
}

これはうまくいきます。BOOL で同じことを試みると、次の警告が表示されます。

「setIsSecret:」の実装における競合するパラメーター タイプ: 「BOOL」(別名「signed char」) と「NSString *__strong」

    - (void)setIsOnline:(NSString *)stringInput {
        if ([stringInput isEqualToString:@"yes"])
            _IsOnline = YES;
        else
            _IsOnline = NO;
    }

ユーザー.h

@interface Achievement : NSObject

    @property (strong, nonatomic) NSNumber *Id;
    @property (strong, nonatomic) NSURL *UserUrl;
    @property (strong, nonatomic) NSString *Title;
    @property (nonatomic) BOOL IsOnline;

@end

私のコードは正常にコンパイルされ、実行されます。NSString プロパティではなく BOOL プロパティで警告が表示される理由を知りたいだけです。これは API ラッパー用なので、警告を抑制したくありません。前もって感謝します。

UPDATE rmaddy に正解がありました。将来同じことをしようとしている人は、すべての型変換を行うカスタム初期化子を作成してください。

4

1 に答える 1