1

私は文字通り何時間もかけて、これに対する答えを見つけようとしました。[とにかく自分が感じていること!] がすべてになるように努めてきました。そして、このエラーが発生しない限り、コードでこのメソッドを呼び出すことはできません:

インスタンスメッセージのレシーバータイプ NSString は、セレクターを使用してメソッドを宣言しませんreturnAsDoubleDigits:

コードをリファクタリングしようとしていたので、このメソッドを再利用して、1 桁の数字 ( に変換NSString) を 2 桁の文字列 (つまり4になります) として返すことができ04ました。

ここで誰か助けてくれませんか?私はそれを正しく宣言しましたか?どうもありがとう!:)

次のように呼び出します。

[doubleDigitString returnAsDoubleDigits: singleDigitString];

ヘッダー ファイル:

- (NSString *)returnAsDoubleDigits: (NSString *)digits;

実装ファイル:

- (NSString *)returnAsDoubleDigits: (NSString *)digits {
    if (digits.length == 1) return [NSString stringWithFormat: @"0%@", digits];
    else return [NSString stringWithFormat: @"0%@", digits];
}
4

6 に答える 6

3

どこから呼んでいるのですか?同じクラスの中で?これはあなたが意図したものですか?

NSString* doubleDigitString = [self returnAsDoubleDigits:digits];

カテゴリもいつでも使用できます。

@implementation NSString (mycategory)


-(NSString *) returnAsDoubleDigits
{
   NSString* doubleDigits = nil;
   if (self.length == 1) {
    doubleDigits = [NSString stringWithFormat: @"0%@",
                    self];
   } else {
    doubleDigits = [NSString stringWithFormat: @"0%@",
                      self];
   }
   return doubleDigits;
}
@end

そして使用する

 NSString* doubleDigitString = [singleDigitString returnAsDoubleDigits];
于 2011-08-20T00:25:00.063 に答える
3

NSString問題は、実際にメソッドを入れたクラスでメソッドを宣言したときに、 type のオブジェクトでメソッドを呼び出していることです。この2つの方法で解決できます: NSString のカテゴリを使用するか、メッセージをメソッドが宣言されている型のオブジェクト。

カテゴリを作成する方法は次のとおりです。

NSString+doubleDigit.h

@interface NSString (doubleDigit)
    -(NSString*)doubleDigit;
@end

NSString+doubleDigit.m

@implementation NSString (doubleDigit)

-(NSString*)doubleDigit {
    return [NSString stringWithFormat:@"%02i", [self integerValue]];
}

@end

次に、この変換を行いたいファイルに次のように#include "NSString+doubleDigit.h"記述します。

NSString *doubleDigitString = [singleDigitString doubleDigit];
于 2011-08-20T00:23:18.847 に答える
1

ここにあるものから、doubleDigitString属するクラスにメソッドを追加していないようです。クラスの既存の実装に追加するには、Objective-C カテゴリを確認してください。

于 2011-08-20T00:23:11.257 に答える
1

NSString クラス型でそのメソッドを呼び出そうとしていますが、そのメソッドは NSStrings に対して宣言されていません。

独自のクラスでそのメソッドを宣言したと仮定します。実装と同じクラスで使用している場合は、次のようにすることができます。

NSString *doubleDigitString = [self returnAsDoubleDigits:singleDigitString];

「自己」は、実装のクラスを指します。上に示したように NSStrings で動作させるには、カテゴリを使用する必要がありますが、達成しようとしているような単純なものをさらに混乱させるため、それについては説明しません。

このような単純なものを機能させるのに何時間もかかる場合は、掘り下げる前に、Objective C の基本を修正する必要があると思います。

于 2011-08-20T00:23:22.300 に答える
0

ここにあるものから、 doubleDigitString が属するクラスにメソッドを追加していないようです。クラスの既存の実装に追加するには、Objective-C カテゴリを確認してください。

于 2014-04-09T10:45:47.283 に答える
-1

カテゴリが正しく宣言されていません。

NSString *singleDigitString = [doubleDigitString returnAsDoubleDigits];
NSString+DoubleDigit.h file

@interface NSString (doubleDigit)
- (NSString*) returnAsDoubleDigits;
@end

NSString+DoubleDigit.m file

@implementation NSString (doubleDigit)

- (NSString*) returnAsDoubleDigits {
    NSString* doubleDigits = nil;
    if ([self length] == 1) {
        doubleDigits = [NSString stringWithFormat: @"0%@",self];
    } else { 
        doubleDigits = [NSString stringWithFormat: @"%@", self];
    } 
    return doubleDigits; 
}
@end
于 2011-08-20T00:25:18.510 に答える