私はObjective-C & iPhone開発の初心者ですので、私に同行してください。NSMutableArrayとNSXMLParserから取り込まれたオブジェクトの取得に関する問題
私は、UITableViewを読み込んで、「アドレス帳」という特定のセルを選択すると、Webリクエストから取得したすべてのアドレスを含む別のUITableViewを読み込む必要があります。 NSXMLParserのデリゲートメソッドを使用して、ロードされたビューのヘッダーファイルで定義されたNSMutableArrayにこれらのアドレスを格納します。しかし、問題は、それらのアドレスがUITableViewセルに表示されている場合に発生します(はい、セル数のカウントを取得しています)。誰もこの問題で私を助けてくれますか?私は今この日についている!アプリのクラッシュのための最も可能性の高い理由はcellForRowAtIndexPathでこの行は
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
AddressEntry *entry = (AddressEntry *)[self.addresses objectAtIndex:indexPath.row];
@try
{
NSLog(@"%@", entry.firstName);
}
@catch (NSException * e)
{
@try
{
NSLog(@"%@", entry.lastName);
}
@catch (NSException * e)
{
NSLog(@"%@", entry.lastName);
}
}
[entry release];
return cell;
}
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
self.currentElement = nil;
self.f_Name = nil;
self.l_Name = nil;
self.phone = nil;
self.email = nil;
count = 0;
self.addresses = [[NSMutableArray alloc] init];
}
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{
if([elementName isEqualToString:@"Entries"])
{
count = [[attributeDict valueForKey:@"total"] intValue];
}
else if([elementName isEqualToString:@"FirstName"])
{
[self.f_Name release];
self.f_Name = [[NSString alloc] init];
}
else if([elementName isEqualToString:@"LastName"])
{
[self.l_Name release];
self.l_Name = [[NSString alloc] init];
}
else if([elementName isEqualToString:@"PhoneNumber"])
{
[self.phone release];
self.phone = [[NSString alloc] init];
}
else if([elementName isEqualToString:@"EmailAddress"])
{
[self.email release];
self.email = [[NSString alloc] init];
}
else if([elementName isEqualToString:@"Record"])
{
[self.addrEntry release];
self.addrEntry = [[[AddressEntry alloc] init] retain];
}
[self.currentElement release];
self.currentElement = nil;
self.currentElement = [elementName copy];
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
//
if([elementName isEqualToString:@"FirstName"])
self.addrEntry.firstName = self.f_Name;
else if ([elementName isEqualToString:@"LastName"])
self.addrEntry.lastName = self.l_Name;
else if([elementName isEqualToString:@"PhoneNumber"])
self.addrEntry.mobile = self.phone;
else if([elementName isEqualToString:@"EmailAddress"])
self.addrEntry.emailAddress = self.email;
else if([elementName isEqualToString:@"Record"])
{
[self.addresses addObject:self.addrEntry];
[self.addrEntry release];
self.addrEntry = nil;
/*AddressEntry *e = (AddressEntry *)[self.addresses lastObject];
NSLog(@"%@ %@ %@ %@", e.firstName, e.lastName, e.mobile, e.emailAddress);
[e release];*/
}
}
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if([currentElement isEqualToString:@"FirstName"])
self.f_Name = string;
else if([currentElement isEqualToString:@"LastName"])
self.l_Name = string;
else if([currentElement isEqualToString:@"PhoneNumber"])
self.phone = string;
else if([currentElement isEqualToString:@"EmailAddress"])
{
self.email = string;
}
}
実際の問題は何ですか? – MusiGenesis
明確でないことに対する謝罪。 @try { NSLog(@ "%@"、entry.firstName);この行に当たった後、アプリケーションがクラッシュします。 } –
誰も助けてください、その私を殺す(私の頭の中で)!!! –