0

私は明らかにこれで何かを得ていません。

私は XML ドキュメントを解析しているので、要素の 1 つに追加する NSMutableString があります。私はこれをすべて機能させることができますが、特定の方法でそれを行うと機能しない理由がわかりません。

@property (copy, nonatomic) NSMutableString *currentFoundCharacter;

これは、ViewController のプロパティを宣言する方法です。

で、〜がある:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
  {
    if (!currentFoundCharacter) {
      currentFoundCharacter = [[NSMutableString alloc] init]; // Have to do this or new strings never append to it.
    }
    if ([currentAttribute compare:@"description"] == NSOrderedSame && currentAttribute.length > 1) {
    [currentFoundCharacter appendString:[string copy]];
  }

これで動作します。それは私が望むすべての要素内で結合します。しかし、合成されたメソッドを使用しようとすると、不変オブジェクトの変更に関するエラーが発生するため、基本的にすべての currentFoundCharacters を self.currentFoundCharacters に置き換えます。

プロパティとインスタンス変数を使用するタイミングと理由を誤解したのかもしれませんが、init メソッド以外では、セッター/ゲッターを使用する方が良いという印象を受けました。最後に、保守可能なコードを確実に作成したいだけです。

4

1 に答える 1

3

プロパティでコピーの代わりに保持を使用します。Copy は不変のコピーを提供します。

于 2012-04-21T22:18:46.827 に答える