私は幾分深刻な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
ありがとうございました。それは間違いなく1つの問題でしたが、それだけで解決することは私のためではありません。私はコードと私のOPを編集しました。それ以上の助けがあれば幸いです。 – evanmcdonnal
私はちょうどあなたのコードを実行し、別の間違いを発見しました。 –
編集ありがとうございました。私はそこに何か疑わしい。私は自動参照カウントをしているので、私はリリースを使用することはできません。以前は、これを修正するためにfoundCharactersのappendStringではなくsetStringメッセージを使ってみましたが、うまくいきませんでした。 今は動作しているようですが、まだ完全にはわかりません。助けてくれてありがとうInglese。 – evanmcdonnal