0

私はObjective-Cを初めて使用し、NSArrayの処理に問題があります。

私はこのようなクラスを持っています

@interface Tuple : NSObject
{
    NSObject* dataKey;
    NSObject* dataValue;
    NSString* dataType;
}
@property(nonatomic, retain) NSObject* dataKey;
@property(nonatomic, retain) NSObject* dataValue;
@property(nonatomic, retain) NSString* dataType;

- (id) initWithKey:(NSObject*)dKey 
          type:(NSString*)dType 
         value:(NSObject*)dValue;
- (NSString*) description;

- (NSString*)   getValueInString; 
- (BOOL)        getValueInBoolean; 
- (NSString*)   getAnswerValueInString; 
- (NSArray*)    getAnswerValueInArray;
@end

これが私の getAnswerValueInArray メソッドです

- (NSArray*) getAnswerValueInArray
{
    NSLog(@"%@",dataValue);
    NSArray* value = (NSArray*)dataValue;
    if ([dataType isEqualToString:@"vague"] == NO) {
        return value;  
    }
 return nil;
}

戻り値は次のようになります ( 'KEY: 0\tTYPE: string\tVALUE = p1\n', 'KEY: 2\tTYPE: string\tVALUE = p4\n' )

しかし、配列をループしようとすると、次のようになります

for (int a=0; a<value.count; a++) 

以下のエラーが表示されます。また、 [value objectAtIndes:0] を試してみたところ、同じ (String) エラーが発生しました。私の推測では、どういうわけか私の配列は実際には配列ではなく文字列であるため、配列メソッドを使用するとエラーがスローされます。しかし、実際の配列を取得するためにこれを修正する理由と方法がわかりません。

2013-02-16 14:46:52.222 [3334:907] -[__NSCFString カウント]: 認識されないセレクターがインスタンス 0x210b6e20 に送信されました

-[__NSCFString objectAtIndex:]: 認識されないセレクターがインスタンス 0x1c5e7a70 に送信されました

どんな助けでも大歓迎です。

ありがとう。

4

2 に答える 2

0

あなたは配列を扱っているのではなく、文字列を扱っているのです。オブジェクトはタイプレスですが、ポインターはタイプされているため、Objective-Cは少し外れています。オブジェクトをポインタに割り当てるだけでは、そのタイプやその他の変更は行われません(カウントは別として)。

文字列にどのような文法が必要か、したがって構文解析が組み込まれていると期待する理由は特に明確ではないようです。そのため、これ以上は言えません。

于 2013-02-16T04:10:52.450 に答える
0

文字列内のコンポーネントにアクセスする前に、文字列を解析して配列を作成する必要があります。開始する1つの方法は、 componentsSeparatedByString:またはcomponentsSeparatedByCharactersInSet:NSStringのメソッドを使用することです。これらのメソッドはそれぞれ、指定された1つまたは複数の文字列で分割することにより、レシーバーから生成された文字列の配列を返します。

于 2013-02-16T04:11:35.993 に答える