特定のWebサービスからの最新のフィードを表示するアプリを作成しています。この目的でNSXMLParserDelegateプロトコルを使用しています。アップルのドキュメントを読み、チュートリアルもいくつか試しましたが、どこかで問題が発生しているようです。方法がわかりません。 didEndElement、foundCharactersは機能しますか、とにかく画像、タイトル、コンテンツ、投稿の公開日を表示したいのですが、ここに私のviewcontroller.hをxmlparsingするのは初めてです(次のコードのtitle要素のみを解析しました)
@property(nonatomic,strong)NSString *currentElement;
@property(nonatomic,strong)NSString *currentTitle;
@property(nonatomic,strong)NSMutableArray *titles;
viewdidload
NSURL *url=[NSURL URLWithString:@"http://www.forbes.com/fast/feed"];
NSXMLParser *parser=[[NSXMLParser alloc]initWithContentsOfURL:url];
[parser setDelegate:self];
[parser parse];
NSLog(@"%d",titles.count);
didStartElement
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
self.currentElement=elementName;
if ([self.currentElement isEqualToString:@"title"])
{
self.currentTitle=[NSMutableString alloc];
titles=[[NSMutableArray alloc]init];
titles=[attributeDict objectForKey:@"title"];
}
}
foundCharacters
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
self.currentElement=elementName;
if ([self.currentElement isEqualToString:@"title"])
{
self.currentTitle=[NSMutableString alloc];
titles=[[NSMutableArray alloc]init];
titles=[attributeDict objectForKey:@"title"];
}
}
didEndElement
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if([self.currentElement isEqualToString:@"title"])
{
NSLog(@"%@",self.currentTitle);
}
}
疑い
1)個々のタイトルオブジェクトを追加できるように、タイトル配列をどこで宣言する必要がありますか。didStartElementでの[attributeDictobjectForKey]の使用は何ですか?私のプログラムではnullを返しました
2)foundCharactersデリゲートは実際に何をしますか?それは何を追加しますか?
3)didEndElementの後、コンパイラがfoundCharactersではなくdidStartElementに到達しないのはなぜですか?
4)最後に、xml解析にNSXMLParserDelegateプロトコルを実際に使用する必要がありますが、touchXML、TBXMLなど、raywenderlichで提供されているものに違いはありますか?
長い投稿で申し訳ありませんが、クエリに関してオンラインで満足のいく回答が得られませんでした。すべてのブレークポイントを使用して、デリゲートがどのように呼び出されるかを理解しました。クエリに対するいくつかの啓発的な回答が必要です。ありがとう、申し訳ありません。