-1

XMLフィードを解析するときに問題が発生します。親ノードごとに約15の子ノードがあります。現在、stringbytrimmingchartersinsetを使用してすべてのノードを解析しています。次にNSCharactersetホワイトスペースとnewline文字セットを使用しています。そのようです:

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
        currentElementValue = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

これは、1つを除くすべてのノードでうまく機能します。このノードでは、テキストをそのまま通過させたいと思います。この特定のノードを他のノードとは異なる方法で処理するようにifステートメントを設定しようとしたので、次のように更新しました。

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{

   if ([testingString isEqualToString:@"AdoptionSummary"]) {
       [currentElementValue appendString:string]; //This keeps breaking
        }
    else {
         currentElementValue = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    }

ただし、エラーが発生します。

***キャッチされなかった例外'NSInvalidArgumentException'が原因でアプリを終了します、理由:'appendStringを使用して不変オブジェクトを変更しようとしました:'

このエラーは、stringbytrimmingchartersinsetとappendStringを組み合わせて使用​​した場合にのみ発生します。ただし、stringbytrimmingchartersinsetまたはappendStringのいずれかを単独で使用すると、エラーなしで解析されます。 currentElementValueはNSMutableStringですが、なぜこのエラーがスローされるのですか?

このNSMutableStringを見てみましたが、appendStringはSIGABRTエラーを生成し、このエラー:'appendStringで不変オブジェクトを変更しようとしました:'-しかし、役に立ちません。

他の14個をトリミングしながら、「AdoptionSummary」に「そのまま」を追加したいのですが、何が間違っていますか?何か提案はありますか?

ありがとう!

4

2 に答える 2

1

その理由currentElementValueは として宣言されていNSStringます。タイプを に変更しNSMutableStringます。

この文字列を NSMutableString で宣言した場合は、オブジェクトの作成も変更する必要があります。以下のコードを変更します。

currentElementValue = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

このコードで:

currentElementValue = [[NSMutableString alloc] initWithString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];

メモリ リークを回避するために、alloc を迅速に処理します。

于 2012-08-06T17:40:00.470 に答える
0
currentElementValue = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

単に NSString を NSMutableString にキャストするだけでは、1 つにはなりません。変更する前に変更可能なコピーを作成してください。

于 2012-08-06T17:45:16.720 に答える