2012-01-06 12 views
0

私は幾分深刻なiOSアプリケーションに取り組んでおり、Xcode、iOS、Objective-Cを初めて使用しています。私はiTunesNでスタンフォードのiOSクラスの最初のいくつかの課題を一緒に追ってきました。それ以外に私は経験がありません。NSMutableArrayにNSXMLParserで取得したデータを埋め込む際の問題

とにかく、NSXMLParserを使用してインターネットから取得したXMLファイルを解析しています。次に、データの一部を表すUGStoryオブジェクトを作成してNSMutableArrayに追加しようとしています。

編集:私は、コードにいくつかの変更を行い、ここでそれを更新しました。今私はNSXMLParser関数に問題があると確信しています。プログラムが実行されると、配列内の30個のオブジェクトが終了しますが、配列を調べると、オブジェクトごとに「範囲外」と「要約不可」と表示されます。

また、このデータは、分割ビューコントローラを設定するために使用されています。タイトルはマスタービューに、リンクはディテールビューを埋めるために使用されます。しかし、これが実行された後、マスターには1つだけのことがあります。 "News @ Ultimate-Guitar.Com"

これはヘッダーで囲まれた最初のテキストで、この時点でヘッダーはまだ検出されていません。このため、私はUGStoryオブジェクトを持たないはずですので、このセルがどのように設定されているのか混乱しています。また、アレイ内のすべてが「範囲外」なので、コントローラはどこからこのデータを取得していますか?コントローラーは、UGFeedReaderを作成し、それにparseFeedメッセージを送信するだけです。

この行で
#import "UGFeedReader.h" 

@implementation UGFeedReader 

@synthesize currentTag = _currentTag; 
@synthesize stories = _stories; 
@synthesize read = _read; 
@synthesize i = _i; 

- (void)parseFeed 
{ 
    NSURL* ugFeed = [NSURL URLWithString:@"http://www.ultimate-guitar.com/modules/rss/news.xml.php"]; 
    NSXMLParser* feedParser = [[NSXMLParser alloc]initWithContentsOfURL:ugFeed]; 
    _stories = [[NSMutableArray alloc] initWithCapacity:10]; 
    _i = 0; 
    _read = NO; 

    [feedParser setDelegate:self]; 
    [feedParser parse]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 

     if ([elementName isEqualToString:@"item"]) 
     { 
      _read = YES; 
      UGStory* temp = [[UGStory alloc] init]; 
      [_stories addObject:temp]; 
     } 
    return; 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    if (!_currentTag) 
    { 
     _currentTag = [[NSMutableString alloc] init]; 
    } 
    [_currentTag appendString:string]; 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if (_read == YES) 
    { 
     if ([elementName isEqualToString:@"title"]) { 
      UGStory* temp = [_stories objectAtIndex:_i]; 
      temp.title = _currentTag; 
     } 
     if ([elementName isEqualToString:@"link"]) { 
      UGStory* temp = [_stories objectAtIndex:_i]; 
      temp.url = [NSURL URLWithString:_currentTag]; 
      _read = NO; 
      _i++; 
     } 
    } 
     return; 
} 

@end 

答えて

0

_stories = [_stories initWithCapacity:10]; 

あなたはおそらく意味:

_stories = [[NSMutableArray alloc] initWithCapacity:10]; 

をすべてaddObject:メッセージは無視されnilアレイ上。

要素を終了した後は、nilと入力して_currentTagになることはありません。

はあなたdidEndElement:

[_currentTag release]; 
_currentTag = nil; 

の最後に、このコードを追加し、それはあなたが期待通りに動作するはずです。

+0

ありがとうございました。それは間違いなく1つの問題でしたが、それだけで解決することは私のためではありません。私はコードと私のOPを編集しました。それ以上の助けがあれば幸いです。 – evanmcdonnal

+0

私はちょうどあなたのコードを実行し、別の間違いを発見しました。 –

+0

編集ありがとうございました。私はそこに何か疑わしい。私は自動参照カウントをしているので、私はリリースを使用することはできません。以前は、これを修正するためにfoundCharactersのappendStringではなくsetStringメッセージを使ってみましたが、うまくいきませんでした。 今は動作しているようですが、まだ完全にはわかりません。助けてくれてありがとうInglese。 – evanmcdonnal

関連する問題