2

私はxmlファイルを解析することによって入力されUITableViewた使用を持っています。NSMutableArray

問題:データは配列に追加されますが、UITableView.

Sublist.h

@interface SubList:UIViewController <UITableViewDelegate, UITableViewDataSource>
{
    IBOutlet UITableView *List1;
    NSXMLParser *xmlparser;
    NSURLConnection *conn;
    NSMutableData *webdata;
    NSString *FolderID;
    NSMutableArray *info;
    NSMutableArray *SubFolderData;
}

@property(nonatomic,retain) NSMutableArray *info;
@property(nonatomic,retain) NSMutableArray *SubFolderData;
@property (nonatomic,retain)NSString *FolderID;
@property(nonatomic,weak)IBOutlet UITableView *List1;
@property (nonatomic,retain) NSString *theXML;

@終わり

Sublist.m

@implementation SubList

- (void)viewDidLoad 
{
    self.navigationController.navigationBar.hidden=YES; 
    [super viewDidLoad];
    [self initWithData];
    [self GetChilds:FolderID UserID:@"1"];
}

-(void)GetChilds:(NSString*)FolderIDRecvd UserID:(NSString*)userID
{
    FolderID=[NSString stringWithFormat:@"%@", FolderIDRecvd];
    NSString *_UserID=@"1";

    NSString *soapMsg=[NSString stringWithFormat:@"<?xml version='1.0' encoding='utf-8'?>    <soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'   xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><TreeDataSubFolder xmlns='http://tempuri.org/'><FolderID>%@</FolderID><UserId>%@</UserId></TreeDataSubFolder></soap:Body></soap:Envelope>",FolderID,_UserID];


    NSURL *url=[NSURL URLWithString:@"http://192.168.1.5/interlogicsmobile/interlogics.asmx?op=TreeDataSubFolder"];
    xmlparser = [[NSXMLParser alloc] initWithContentsOfURL:url];
    NSMutableURLRequest *req=[NSMutableURLRequest requestWithURL:url];
    NSString *msgLength=[NSString stringWithFormat:@"%d",[soapMsg length]];

    [req addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [req addValue:@"http://tempuri.org/TreeDataSubFolder" forHTTPHeaderField:@"SOAPAction"];
    [req addValue:@"length" forHTTPHeaderField:@"Content-Length"];
    [req setHTTPMethod:@"POST"];
    [req setHTTPBody: [soapMsg dataUsingEncoding:NSUTF8StringEncoding]];

    conn=[[NSURLConnection alloc]initWithRequest:req delegate:self];

    if(conn) {
        webdata=[[NSMutableData data] retain];
    }
}

-(void) connection:(NSURLConnection *) connection didReceiveResponse:(NSURLResponse *)   response 
{
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response; 
    int responseStausCode = [httpResponse statusCode]; 
    [webdata setLength: 0]; 
}

-(void) connection:(NSURLConnection *) connection didReceiveData:(NSData *) data 
{
    [webdata appendData:data];
}

-(void) connection:(NSURLConnection *) connection didFailWithError:(NSError *) error 
{
    [webdata release];
    [connection release];
}

-(void) connectionDidFinishLoading:(NSURLConnection *) connection 
{
    theXML= [[NSString alloc] 
          initWithBytes: [webdata mutableBytes] 
          length:[webdata length] 
          encoding:NSUTF8StringEncoding];

    [theXML release];

    SubListParser *parserObjForData1=[[SubListParser alloc]init];
    SubFolderData=[[[NSMutableArray alloc]init]retain];
    SubFolderData=[parserObjForData1 UserXMLParser1:webdata];

    [connection release];
    [webdata release];
    [List1 reloadData];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return([SubFolderData count]/2);
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    int row = [indexPath row]*2;
    static  NSString *cellIdentifier=@"cell";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if(cell==nil)
    {
        cell=[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault   reuseIdentifier:@"cell"] autorelease];
        cell.textLabel.text = [SubFolderData objectAtIndex:row+1];
        cell.detailTextLabel.text = [SubFolderData objectAtIndex:row];
    }

       for (int i=0; i<=[SubFolderData count]; i++) {

        NSString *filename = [SubFolderData objectAtIndex:indexPath.row];
        NSString *ext = [filename pathExtension];
        if ([ext isEqualToString:@"doc"] || [ext isEqualToString:@"DOC"]) {
            [cell.imageView setImage:[UIImage imageNamed:@"DOC.png"]];
        } else if ([ext isEqualToString:@"jpg"]|| [ext isEqualToString:@"JPG"]) {
            [cell.imageView setImage:[UIImage imageNamed:@"JPG.png"]];
        }else if([ext isEqualToString:@"pdf"]|| [ext isEqualToString:@"PDF"]){
            [cell.imageView setImage:[UIImage imageNamed:@"PDF.png"]];
        }else if([ext isEqualToString:@""]){
            [cell.imageView setImage:[UIImage imageNamed:@"Folder2.png"]];
        }else if([ext isEqualToString:@"docx"]|| [ext isEqualToString:@"DOCX"]){
            [cell.imageView setImage:[UIImage imageNamed:@"DOCX.png"]];
        }else if([ext isEqualToString:@"TIF"]|| [ext isEqualToString:@"tif"]){
            [cell.imageView setImage:[UIImage imageNamed:@"TIFF.png"]];
        }else if([ext isEqualToString:@"png"]|| [ext isEqualToString:@"PNG"]){
            [cell.imageView setImage:[UIImage imageNamed:@"PNG.png"]];
        }else if([ext isEqualToString:@"gif"]|| [ext isEqualToString:@"GIF"]){
            [cell.imageView setImage:[UIImage imageNamed:@"GIF.png"]];
        }else if([ext isEqualToString:@"jpeg"]|| [ext isEqualToString:@"JPEG"]){
            [cell.imageView setImage:[UIImage imageNamed:@"JPG.png"]];
        }
    }

    return cell;
}

@end

編集

-(NSMutableArray *)UserXMLParser1:(NSData *)WebDataRecieved1
{
    NSXMLParser *xmlparser1=[[NSXMLParser alloc]initWithData:WebDataRecieved1];
    [xmlparser1 setDelegate:self];
    BOOL success=[xmlparser1 parse];
    NSLog(@"%i",success); return listset1;
}
4

4 に答える 4

1

こんにちは RANA パーサー メソッドを投稿していないため、どのように解析を行っているかわかりません。しかし、あなたのコードに基づいて、私は何かを得ました

  1. この [parserObjForData1 UserXMLParser1:webdata] の戻り型。配列は正しいですか?

  2. 私の推測が正しい場合は、これを試してください

SubListParser *parserObjForData1=[[SubListParser alloc]init];

SubFolderData=[[NSMutableArray alloc]initWithArray:[parserObjForData1 UserXMLParser1:webdata]];

それ以外の

 SubListParser *parserObjForData1=[[SubListParser alloc]init];
    SubFolderData=[[[NSMutableArray alloc]init];
    SubFolderData=[parserObjForData1 UserXMLParser1:webdata];

お役に立てば幸いです。

于 2013-04-12T11:13:04.487 に答える
1

デリゲートが入力されていないため、それらを設定していません。使用;

[List1 setDelegate:self];
[List1 setDataSource:self];

viewDidLoad

于 2013-04-11T05:57:10.533 に答える
0
  • インターフェイス ビルダーでテーブル ビューを選択します
  • 接続インスペクターを選択
  • データソースに接続し、ファイルの所有者に委任します..

テーブル ビュー接続は下の画像のようになります。

ここに画像の説明を入力

また、テーブル ビュー デリゲートが呼び出される前に配列が追加されているかどうかも確認します。

于 2013-04-11T06:18:59.917 に答える