0

誰かがここでエラーがどこにあるかを見ることができますか...

NSArray *arr = [str componentsSeparatedByString:@","];
NSString *inputStr = [arr objectAtIndex:0];
NSString *trimmedStr = [inputStr stringByTrimmingCharactersInSet:
                               [NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
[[arr objectAtIndex:0] replaceObjectAtIndex:0 withObject:trimmedStr];   

出力:

-[__NSCFString replaceObjectAtIndex:withObject:]: 
unrecognized selector sent to instance 0x68a8eb0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '-[__NSCFString replaceObjectAtIndex:withObject:]: 
unrecognized selector sent to instance 0x68a8eb0'

編集:配列が宣言され、入力されたことを示すために余分な行を追加しました。
以下のコメントで述べたように、行を置き換えると:

[[arr objectAtIndex:0] replaceObjectAtIndex:0 withObject:trimmedStr];  

と:

[arr replaceObjectAtIndex:0 withObject:trimmedStr];  

Xcode エラー (実行前):

 No visible @interface for 'NSArray' declares the selector 'replaceObjectAtIndex:withObject'
4

3 に答える 3

3

これは何が悪いのですか:

[[arr objectAtIndex:0] replaceObjectAtIndex:0 withObject:trimmedStr];

あなたが実際にやりたいことは次のとおりです。

[arr replaceObjectAtIndex:0 withObject:trimmedStr];

replaceObjectAtIndex を配列内の文字列 ([arr objectAtIndex:0]) に送信していましたが、これは明らかにうまくいきません。そのメッセージを (変更可能な) 配列に送信すると、文字列が新しいものに置き換えられます。

次の質問について: あなたがやろうとしていることなどについて詳しく教えてください。10 語未満に制限しないでください。詳細を提供すればするほど、より多くの支援が得られます。

于 2012-07-30T23:56:56.980 に答える
1

そのためだけに、正しい修正方法は次のとおりです。

NSMutableArray *arr = [[[str componentsSeparatedByString:@","] mutableCopy] autorelease];
NSString *inputStr = [arr objectAtIndex:0];
NSString *trimmedStr = [inputStr stringByTrimmingCharactersInSet:
                           [NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
[arr replaceObjectAtIndex:0 withObject:trimmedStr];   

または、ARCを使用している場合:

NSMutableArray *arr = [[str componentsSeparatedByString:@","] mutableCopy];
NSString *inputStr = [arr objectAtIndex:0];
NSString *trimmedStr = [inputStr stringByTrimmingCharactersInSet:
                           [NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
[arr replaceObjectAtIndex:0 withObject:trimmedStr];   
于 2012-07-31T06:22:52.350 に答える
1

あなたが何をしようとしているのかはわかりませんが (何が何なのかわからないため)、配列からオブジェクトをarr取得し、それに対して実行しようとしているように見えます。おそらく、代わりにこれを意味しました:NSStringreplaceObjectAtIndex:withObject:

[arr replaceObjectAtIndex:0 withObject:trimmedStr];
于 2012-07-30T23:57:44.070 に答える