2012-04-27 26 views
0

私は最新のつぶやきを取得して、私のアプリに表示しています。私はNSMutableStringに入れて、私のxmlparser.mファイルに以下のようにその文字列を初期化します。NSCharacterSetは文字列を切り捨てます

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

私はつぶやきを取得することができますが、何とかそれはつぶやきの一部をカットし、それの一部を示しています。例えば、つぶやきは

教室でのビデオゲームですか?ソーシャルメディアは& #technologyがされる教育http://bit.ly/KfGViF @GOVERNINGの#edtech

を変更するが、何それは示しすることができます:あなたはなぜ

#technologyは、教育http://bit.ly/KfGViF @GOVERNINGの#edtech

を変更することができますそれはだと思いますか?他の方法でcurrentNodeContentを初期化しようとしましたが、問題を解決できませんでした。

これはなぜ起こっているのですか?

+1

文字列変数は、メソッドに渡されるのとまったく同じ方法で渡されますか? – sosborn

+0

私はトリミングの問題の原因を知りませんが、それはあなたが変更可能な文字列を得る方法ではありません。トリミングされた文字列インスタンスに対して 'mutableCopy'を呼び出す必要があります。あなたはただキャストすることはできません。 – warrenm

答えて

1

イベントドリブン(SAX)パーサーは、コールバック内のノードのテキストの一部だけを自由に返すことができます。渡されたツイートの一部しか取得していない可能性があります。エレメントの終わりを示すコールバックが得られるまで、おそらく可変文字列に文字を蓄積するべきです。リスト3とその周辺のテキストthis guideを参照してください。

+1

特に、上記のコードスニペットはおそらく、ツイートのセグメント(おそらくアンパサンド( '&')のエンティティの前の部分、アンパサンドのエンティティ自体、アンパサンドの後の部分で3回繰り返されます) 。それは毎回 'currentNodeContent'を上書きして、最後の部分だけを覚えています。 –

+0

私はcurrentNodeContent =(NSMutableString *)[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]のような何かをしようとしました。 [currentStringValue appendString:string];しかし、今回は、 'NSInvalidArgumentException'という理由でSIGBRTエラーが発生しました: 'appendStringで不変オブジェクトを変更しようとしました:' – user1244069

0

あなたはここでは2つの問題持っている:

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

は、単にNSMutableStringからNSStringが動作しないキャストを。 NSStringの内容を使用して、自分自身で変更可能なコピーを作成するか、新しいNSMutableStringを初期化する必要があります。

さらに、テキストパーサーは、単に '&'をエンティティ参照の一部として解釈するか、エンティティ参照自体である可能性があるため、文字列の最後の部分を提供します。

あなたはおそらくやりたいことはある:

  1. あなたは構文解析を開始する前に、それが空NSMutableStringになるようにcurrentNodeContentを初期化:

    currentNodeContent = [NSMutableString string]; 
    
  2. あなたが解析していると、アペンド文字はcurrentNodeContentに:

    [currentNodeContent appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    
+0

今回は[NSMutableArray insertObject:atIndex:]:0にオブジェクトを挿入しようとしました 'エラー – user1244069

+0

@ user1244069 : 'currentNodeContent = [[NSMutableString alloc] init];'を試してください。しかし、配列にオブジェクトを挿入しようとしているコードを投稿してください。 – dreamlax

+0

ここで私はそれを初期化しました:-(id)loadXMLByURL:(NSString *)urlString {currentNodeContent = [[NSMutableString alloc] init];} – user1244069

関連する問題