在表格视图单元格中显示 NSMutableArray

Posted

技术标签:

【中文标题】在表格视图单元格中显示 NSMutableArray【英文标题】:Display NSMutableArray in Table View Cell 【发布时间】:2010-01-13 08:53:13 【问题描述】:

如何在表格视图单元格中显示 arrayData? 我想将表格视图单元格的标签文本设置为解析数据中的“ename”。 请帮帮我。

提前致谢。

- (void)viewDidLoad 

    NSString *url = [NSString stringWithFormat:@"http://mmabigshow.com/app/get_result_from_query.php?q=select * from event"];

    NSString *escapedUrl = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

    [self performSelector:@selector(startParsing:) withObject:escapedUrl afterDelay:1.0];

    NSLog(@"View Did Load End");*/
     [super viewDidLoad];


- (void) startParsing: (NSString *) query

    NSLog(@"Start Of Parsing");
    NSURL *xmlURL = [[NSURL alloc] initWithString:query];
    NSData *myData = [NSData dataWithContentsOfURL:xmlURL];
    NSString *myStr = [[NSString alloc] initWithData:myData encoding:NSWindowsCP1252StringEncoding];
    myStr = [myStr stringByReplacingOccurrencesOfString:@"encoding=\"windows-1252\"" withString:@""];
    NSData* aData = [myStr dataUsingEncoding:NSUTF8StringEncoding];

    rssParser = [[NSXMLParser alloc] initWithData:aData];
    [rssParser setDelegate:self];
    [rssParser setShouldProcessNamespaces:NO];
    [rssParser setShouldReportNamespacePrefixes:NO];
    [rssParser setShouldResolveExternalEntities:NO];    
    [rssParser parse];
    NSLog(@"End of Parsing");




#pragma mark xml parser
#pragma mark -

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict            
    currentElement = [elementName copy];
    if ([elementName isEqualToString:@"table"])
    item = [[NSMutableDictionary alloc] init];
    currentEid = [[NSMutableString alloc] init];
    currentEname = [[NSMutableString alloc] init];
    currentEurl = [[NSMutableString alloc] init];
    dataArray = [[NSMutableArray alloc] init];
    
    //NSLog(@"didStartElement");
    

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName     

    if ([elementName isEqualToString:@"table"]) 
        // save values to an item, then store that item into the array...
        [item setObject:currentEname forKey:@"ename"];
        //NSLog(@"%@",item);
        [dataArray addObject:[[item copy] autorelease]];
        //NSLog(@"%@",dataArray);
        
    [currentEid release];
    [currentEname release];
    [currentEurl release];



- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    if ([currentElement isEqualToString:@"eid"]) 
        [currentEid appendString:string];
     else if ([currentElement isEqualToString:@"ename"]) 
        [currentEname appendString:string];
        //NSLog(@"%@",currentEname);
     else if ([currentElement isEqualToString:@"eurl"]) 
        [currentEurl appendString:string];
     
    //  NSLog(@"foundCharacters");



#pragma mark - 
#pragma mark Table Data Source Methods 
- (NSInteger)tableView:(UITableView *)tableView 
 numberOfRowsInSection:(NSInteger)section  
    NSLog(@"numberOfRowsInSection");

    return [self.dataArray count]; 


- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath  
    NSLog(@"cellForRowAtIndexPath");
    static NSString *CustomCellIdentifier = @"CustomCellIdentifier "; 

    TableDetailsCell *cell = (TableDetailsCell *)[tableView dequeueReusableCellWithIdentifier: CustomCellIdentifier]; 
    if (cell == nil)  
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableDetailsCell" owner:self options:nil]; 
        for (id oneObject in nib) 
            if ([oneObject isKindOfClass:[TableDetailsCell class]]) 
                cell = (TableDetailsCell *)oneObject; 
     
    NSUInteger row = [indexPath row]; 

    NSDictionary *rowData = [self.dataArray objectAtIndex:row]; 
    //NSLog(@"%@",rowData);

    cell.text = [rowData objectForKey:@"ename"]; 
    cell.labelName.text= [rowData objectForKey:@"ename"];




    return cell; 
 

【问题讨论】:

@Rohit:请重新格式化问题。 @skaffman:你编辑了什么??? 我已将 arrayData 声明为 NSMutableArray。我想在表格视图单元格中显示它。并将其分配给它的文本。 您需要提供更多信息。究竟发生了什么是你不想发生的?表格根本不显示吗?它是否显示但单元格错误?文字不显示? dataArray 是否实际填充? 我认为先调用表格视图单元格的数据源方法,然后调用 viewDidLoad 方法。所以我得到 dataArray.count = 0;我只想在表格视图单元格中将“ename”显示为文本,单击时将显示详细信息。目前我在表格视图单元格中没有得到任何内容。 【参考方案1】:

我相信您的问题是您没有始终将 dataArray 称为 self.dataArray,这可能会导致您的程序无法正常工作。

然后通过分配

cell.textLabel.text = [self.dataArray objectAtIndex:indexRow.row];

希望对你有所帮助

塞布·卡德 “我是来帮忙的”

【讨论】:

【参考方案2】:

Apple 的SeismicXML app 正是这样做的。查看 rootViewController 的 cellForRowAtIndexPath。

另外,请确保您的 tableview 在 Interface Builder 中正确设置了它的委托和数据源(如果您选择使用它)。

【讨论】:

以上是关于在表格视图单元格中显示 NSMutableArray的主要内容,如果未能解决你的问题,请参考以下文章

在表格视图单元格中以编程方式显示图像

在表格视图单元格中滑动后显示多个数据

表格视图不显示单元格中的内容

如何在右侧的表格视图单元格中显示徽章计数

在表格视图单元格中添加集合视图 swift 3

如何在表格视图的单元格中使用夏季元素作为标签?