![](/img/trans.png)
[英]how can i display UIlabel in UItableview cell where UILabel containing the xml data?
[英]How to display XML parsed data in UILabel
我正在嘗試顯示從Web的XML文件解析的數據到名為profilesLabel的UILabel。
我試圖顯示標簽中的所有姓氏,但由於某種原因,該值設置為電子郵件地址。 有人可以幫助我了解我為什么不熟悉Objective-C嗎
這是代碼:
-(id)loadXMLByURL:(NSString *)urlString
{
profile = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];
return self;
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if([elementName isEqualToString:@"firstname"])
{
currentProfile = [ViewController alloc];
isStatus = YES;
}
if([elementName isEqualToString:@"lastname"])
{
currentProfile = [ViewController alloc];
isStatus = YES;
}
if([elementName isEqualToString:@"email"])
{
currentProfile = [ViewController alloc];
isStatus = YES;
}
if([elementName isEqualToString:@"address"])
{
currentProfile = [ViewController alloc];
isStatus = YES;
}
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if([elementName isEqualToString:@"firstname"])
{
currentProfile->firstName = currentNodeContent;
NSLog(@"%@",currentProfile->firstName);
}
if([elementName isEqualToString:@"lastname"])
{
currentProfile->lastName = currentNodeContent;
NSLog(@"%@",currentProfile->lastName);
last_Name.text = currentProfile->lastName;
}
if([elementName isEqualToString:@"email"])
{
currentProfile->lastName = currentNodeContent;
NSLog(@"%@",currentProfile->lastName);
last_Name.text = currentProfile->lastName;
}
if([elementName isEqualToString:@"address"])
{
currentProfile->lastName = currentNodeContent;
NSLog(@"%@",currentProfile->lastName);
last_Name.text = currentProfile->lastName;
}
if([elementName isEqualToString:@"profiles"])
{
[self->profile addObject:currentProfile];
currentProfile = nil;
currentNodeContent = nil;
}
}
- (IBAction)bringFont:(id)sender
{
//Here is a button that should show the parsed data in profilesLabel when pressed
profilesLabel.text = currentProfile->lastName; //Shows email address for some reason
//What I want is to show every single profile in profilesLabel underneath each other
}
- (void)viewDidLoad
{
[profilesScrolView setScrollEnabled:YES];
[profilesScrolView setContentSize:CGSizeMake(680, 1200)];
[super viewDidLoad];
xmlParser = [[ViewController alloc] loadXMLByURL:@"http://dierenpensionlindehof.nl/XML_File.xml"];
}
任何幫助將不勝感激,Tahnks!
這里的問題是:
if([elementName isEqualToString:@"profiles"])
{
[self->profile addObject:currentProfile];
currentProfile = nil;
currentNodeContent = nil;
}
您正在將currentProfile
設置為nil
然后在這里使用currentProfile:
- (IBAction)bringFont:(id)sender
{
//Here is a button that should show the parsed data in profilesLabel when pressed
profilesLabel.text = currentProfile->lastName;
編輯:澄清該問題后想知道如何顯示不同的數據。
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
...
// At the end of each loop add current profile to the mutable array
[profile addObject:currentProfile];
// Now you can set currentProfile to nil
currentProfile = nil;
}
- (IBAction)bringFont:(id)sender
{
// If you want to display all of this data I would recommend creating a
// UITableView and have each entry as a row's title. But thats another
// issue so to set them all into the label as you asked:
// Loop through the array and add the strings together adding a newline each time
NSMutableString *str = [[NSMutableString alloc] init];
for(NSObject *obj in profile)
{
// Obj will need to be casted to whatever type 'currentProfile' is
[str appendFormat:@"\n %@", obj->lastName];
}
// Compute what height the UILabel needs to be to display this string
CGSize expectedSize = [str sizeWithFont:[UIFont systemFontOfSize:[UIFont systemFontSize]] constrainedToSize:CGSizeMake(320, 9999) lineBreakMode:NSLineBreakByWordWrapping];
CGRect newFrame = CGRectMake(0, 0, expectedSize.width, expectedSize.height);
[profilesLabel setFrame:newFrame];
[profilesLabel setText:str];
}
編輯2:
在進一步說明問題是您沒有姓氏之后,請引起注意以下事實:您正在此函數中將所有內容分配給lastName:
if([elementName isEqualToString:@"lastname"])
{
currentProfile->lastName = currentNodeContent;
NSLog(@"%@",currentProfile->lastName);
last_Name.text = currentProfile->lastName;
}
if([elementName isEqualToString:@"email"])
{
currentProfile->lastName = currentNodeContent;
NSLog(@"%@",currentProfile->lastName);
last_Name.text = currentProfile->lastName;
}
if([elementName isEqualToString:@"address"])
{
currentProfile->lastName = currentNodeContent;
NSLog(@"%@",currentProfile->lastName);
last_Name.text = currentProfile->lastName;
}
在您使用的每個部分中: currentProfile->lastName = currentNodeContent;
您需要在currentProfile中設置其他值!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.