0

NSStringのサブクラスである「word」という新しいクラスのメソッドを作成しようとしています。単一の文字を含むNSStringを受け入れ、その文字列のすべてのインスタンスの単語内の場所を返すメソッドが必要です。私はこれまでにこれを持っています:

@implementation Word
    -(NSMutableArray *)placeOfLetter: (NSString *)letterAsked;{
        NSUInteger *len=(NSUInteger *)[self length];
        int y=0;
        char letter=(char)letterAsked; 

        for (NSUInteger *x=0; x<len; x++) {
                if ([self characterAtIndex:*x]==letter){
                     [matchingLetters insertObject:x atIndex:y];
                     y++;
                }
        }
    }     
@end

ただし、xcodeは、「NSUIntegerからidへの暗黙の変換が許可されていないため、xをinsertObjectのパラメーターとして指定できないと言っています。これを回避するにはどうすればよいですか?

4

2 に答える 2

2

あなたが直面している問題は、主にあなたNSUIntegerがポインタとして扱うことに起因しています。他にもキャストの問題があります。次のことを試してください。

  • letterAsked引数に完全な文字列を取り、charそれから抜け出す代わりに、最初に引数としてchar(または)を取得します。変換を完全にunichar回避します。letter = (char)letterAsked
  • lenポインタを作らないでください。宣言する必要はまったくないかもしれませんlenfor次のようにループを作成することを検討してください。

    for(NSUInteger x = 0; x < [self length]; x++) { // ...
    

    -characterAtIndex:これは、通話にも役立ちます。xキャラクターを取得するために逆参照する必要はもうありません。

  • Hot Licksがコメントで述べたように、NSArray内の位置が必要な場合は、NSNumberを使用します。NSArrayインスタンスに入れるには、数値をクラスインスタンスにする必要があります。x次のようにNSNumberを作成できます。

    NSNumber * foundPosition = [NSNumber numberWithUnsignedInteger:x];
    
  • -addObject:毎回追跡してインクリメントするのではなく、NSMutableArrayのメソッドを使用することを検討してくださいy。同じ結果が得られます。

于 2012-07-16T17:14:43.270 に答える
1

NSUIntegerプラットフォームに応じて、またはのいずれかにtypedefなります。unsigned intunsigned long オブジェクトタイプではありません。したがって、を宣言すると、 unsigned-integerへのポインタとしてNSUInteger *x=0宣言し、nullに初期化することになります。x

は、引数として、ではなく、をinsertObject:atIndex:必要とします。NSUIntegerNSUInteger*index

ステートメントとメッセージ*からを取り出してください。forcharacterAtIndex:

メソッドには、ポインタとして使用して宣言する代わりに文字を取得letterAskedする代わりにキャストするなど、他の問題もあります。charcharacterAtIndex:len

于 2012-07-16T17:15:24.207 に答える