0

サーバーから XML ファイルを取得して保存し、解析してUIListView. ブログ投稿の名前は、他の情報とともに XML ファイルに保存されます。Postデータを操作するために、 (ブログ投稿の名前、リンク、コンテンツなどPostListを格納する) および (NSMutableArrayすべてのPostオブジェクトを他の情報と共に格納する) 2 つのクラスを作成しました。

以下のループ (私のクラスのgetPostsメソッドの一部) で、変数が変更されるたびに、以前のループ反復から格納されたすべての値の値が変更されるという問題が発生しています。PostListaPostaPost

なぜそれが起こっているのかわかりません。誰でも説明できますか?

TBXMLElement *element = tbxml.rootXMLElement;
TBXMLElement *nextElement = element->nextSibling;
NSLog(@"URLs have been set, preparing for parse/input. [PostList.getPosts]");

//Extracts the content of the XML file and saves it to values in the Post Class
do {
    /**********
     * This loop goes through the XML file looking for <item> tags that hold information
     * about the blog posts. It finds <item> tags and scours them for <title>, <description>, 
     * <pubdate>, and <link> tags to put into the class variables for the Post Class (aPost).
     *********/

    NSString *stringElement = [TBXML elementName:element];
    NSLog(@"%@", stringElement);

    //Sorts through the header junk to find the first <item> tag.
    if (![stringElement isEqualToString:@"item"]) {
        if (!(element->firstChild)) {
            if (!(element->nextSibling)) {
                element = nil;
            }
            element = element->nextSibling;
        }
        element = element->firstChild;
    }
    //Once the first <item> tag is found, this code executes.
    else {
        //Now we move to the first child tag and scour its contents and its siblings
        nextElement = [TBXML nextSiblingNamed:@"item" searchFromElement:element];
        element = element->firstChild;
        do {
            //Here it loops over and over until all the parts have been collected.
            stringElement = [TBXML elementName:element];
            if ([stringElement isEqualToString:@"title"]) {
                aPost.name = [TBXML textForElement:element];
            }
            if ([stringElement isEqualToString:@"description"]) {
                aPost.content = [TBXML textForElement:element];
            }
            if ([stringElement isEqualToString:@"link"]) {
                aPost.postURL = [TBXML textForElement:element];
            }
            if ([stringElement isEqualToString:@"pubdate"]) {
                aPost.publicationDate = [TBXML textForElement:element];
            }
            element = element->nextSibling;
        } while (element->nextSibling);
        NSLog(@"%@", [self getName:self.aPost]);
        [self.postsArray insertObject:aPost atIndex:countingIndex];
        countingIndex++;
        element = nextElement;

    }
} while ((element != nil));
4

2 に答える 2

2

ルックの反復ごとに新しい Post 要素を作成する必要があります。そうしないと、配列内のすべてのエントリが同じオブジェクトを参照し、値を更新します。

do {
    //...
    if (...) {
    } else {
        //...
        aPost = [[Post alloc] init];
        do {
            //...
        } while(...)
        //...
    }
    //...
} while(...)
于 2013-04-10T07:15:56.073 に答える