現在、RaptureXMLを使用して、テーブルビュー内のURLtio表示からデータを取得しています。以下に示すように、必要なすべての文字列を取得して配列に追加することができました。
- (void)loadURL {
RXMLElement *rootXML = [RXMLElement elementFromURL:[NSURL URLWithString:@"http://api.somexml.com/xml"]];
NSLog(@"%@ %@", rootXML.tag, [rootXML attribute:@"totalEntries"]);
[rootXML iterateWithRootXPath:@"//event" usingBlock:^(RXMLElement *event) {
// NSLog(@"Event - URI: %@", [event attribute:@"uri"]);
// NSLog(@"Event - Venue: %@", [event attribute:@"displayName"]);
// NSLog(@"Event - Type: %@", [event attribute:@"type"]);
[rootXML iterateWithRootXPath:@"//location" usingBlock: ^(RXMLElement *location) {
// NSLog(@"Location - City: %@",[location attribute:@"city"]);
// NSLog(@"Location - Latitude : %@",[location attribute:@"lat"]);
// NSLog(@"Location - Longitude: %@",[location attribute:@"lng"]);
[rootXML iterateWithRootXPath:@"//start" usingBlock:^(RXMLElement *start) {
// NSLog(@"Start - Time: %@",[start attribute:@"time"]);
// NSLog(@"Start - Date: %@",[start attribute:@"date"]);
[rootXML iterateWithRootXPath:@"//performance" usingBlock:^(RXMLElement *performance) {
// NSLog(@"Performance - Artist: %@",[start attribute:@"displayName"]);
[events addObject:[NSArray arrayWithObjects:
[event attribute:@"uri"],
[event attribute:@"displayName"],
[event attribute:@"type"],
[location attribute:@"city"],
[location attribute:@"lat"],
[location attribute:@"lng"],
[start attribute:@"time"],
[start attribute:@"date"],
[performance attribute:@"displayName"],
nil]];
}];
}];
}];
}];
}
問題は、行数を割り当てると、6ではなく大きな数が返されることです。
return [events count];
XMLファイルは次のようになります。
<resultsPage totalEntries="6" perPage="50" page="1" status="ok">
<results>
<event uri="http://somexml.com/xml" popularity="0.863682" displayName="Radio 1's Hackney
Weekend 2012" id="9234656" type="Festival" status="ok">
<location city="London, UK" lng="-0.128" lat="51.5078"/>
<series displayName="Radio 1's Hackney Weekend"/>
<end time="" date="2012-06-24" datetime=""/>
<start time="" date="2012-06-23" datetime=""/>
<performance displayName="Lucy Labeaux" billingIndex="5" id="23336188" billing="headline">
<artist uri="http://www.somexml.com/artistxml" displayName="Lucy Labeaux" id="1168415">
<identifier href="http://somexml.com.xml" mbid="4593d49a-7f67-46ba-9ec0-126bd676286f"/>
</artist>
</performance>
ご協力ありがとうございました!
****
配列のオブジェクトに関連するエラーを取得しています。
****
だから私は常にコードを実行することから何かを理解しました。以下を見ると、オブジェクトを3回別々に配列に追加しています。
- (void)loadURL {
RXMLElement *rootXML = [RXMLElement elementFromURL:[NSURL URLWithString:@"http://somexml.com/xml"]];
NSLog(@"%@ %@", rootXML.tag, [rootXML attribute:@"totalEntries"]);
[rootXML iterateWithRootXPath:@"//event" usingBlock:^(RXMLElement *event) {
[events addObject:[NSArray arrayWithObjects:
[event attribute:@"uri"],
[event attribute:@"displayName"],
[event attribute:@"type"], nil]];
}];
[rootXML iterateWithRootXPath:@"//location" usingBlock: ^(RXMLElement *location) {
[events addObject:[NSArray arrayWithObjects:
[location attribute:@"city"],
[location attribute:@"lat"],
[location attribute:@"lng"],
nil]];
}];
[rootXML iterateWithRootXPath:@"//start" usingBlock:^(RXMLElement *start) {
[events addObject:[NSArray arrayWithObjects:
[start attribute:@"time"],
[start attribute:@"date"],
nil]];
}];
}
オブジェクトをインターフェイスにリンクできるようにオブジェクトを呼び出すと、次のようになります。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
EventsCell *cell = (EventsCell *)[tableView dequeueReusableCellWithIdentifier:@"EventsCell"];
cell.venueLabel.text = [NSString stringWithFormat:@"%@",[[events objectAtIndex:indexPath.row] objectAtIndex:2]];
return cell;
}
インデックスで合計8つのオブジェクトを作成するのではなく、3つしか作成しないことに気付きました。新しいオブジェクトを追加するたびに、それらの3つのインデックスに追加されます。たとえば、会場ラベルをobjectAtIndex 2に割り当てると、ラベルにタイプが表示された6行だけでなく、別の6行に時間が表示されます。
これが私のviewDidLoadの外観です。
- (void)viewDidLoad
{
[super viewDidLoad];
self.events = [[NSMutableArray alloc] init];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self loadURL];
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
});
}