2013-05-06 51 views
3

我想加載數據的tableview從我的Web服務在我的iPhone應用程序中加載來自web服務的數據。所有輸出都正常工作,但我的表不包含任何數據。它是空的。所有的輸出結果工作,但tableview中沒有在iphone

我沒有找到應用程序中的任何錯誤。爲什麼tableview不能從Web服務中加載數據?

ScoreClass.h

@interface ScoreClass : NSObject { 
    IBOutlet NSInteger  *ScoreID; 
    IBOutlet NSInteger  *UserScore; 
    IBOutlet NSInteger  *GameID;  
    IBOutlet NSString  *MacID; 
    IBOutlet NSString  *NickName; 
    IBOutlet Boolean  *IsDeleted; 
    IBOutlet NSDate  *CreatedOn; 
    IBOutlet NSDate  *ModifiedOn; 
    NSMutableArray  *ScoreList; 
} 

@property(assign, readwrite) NSInteger  *ScoreID; 
@property(assign, readwrite) NSInteger  *UserScore; 
@property(assign, readwrite) NSInteger  *GameID; 
@property(nonatomic, retain) NSString  *MacID; 
@property(nonatomic, retain) NSString  *NickName; 
@property(nonatomic, assign) Boolean  *IsDeleted; 
@property(nonatomic, retain) NSDate   *CreatedOn; 
@property(nonatomic, retain) NSDate   *ModifiedOn; 
@property(retain, readwrite) NSMutableArray  *ScoreList; 


@end 

ScoreClass.m

#import "ScoreClass.h" 


@implementation ScoreClass 

@synthesize ScoreID, UserScore, GameID, MacID, NickName, IsDeleted,CreatedOn,  ModifiedOn,ScoreList; 

-(id)init { 
    [super init]; 
    MacID = [NSString stringWithFormat:@""]; 
    NickName= [NSString stringWithFormat:@""]; 
    return self; 
} 

-(void) dealloc{ 
    [MacID release]; 
    [NickName release]; 
    [super dealloc]; 
} 

@end 

ScoreWebService.h

#import <UIKit/UIKit.h> 
#import "ScoreClass.h" 

@interface ScoreWebService : UIViewController { 
    // Request 
     NSString  *address; 
    NSString  *xmlNamespace; 
    NSString  *operation; 
    NSString  *parameters; 
    NSMutableString  *inComeValue; 
// Connection 
    BOOL   recordResults; 
    BOOL   connectionFinished; 

// Xml Parsing 
     NSMutableString *soapResults; 
    NSMutableData *webData; 
    NSXMLParser  *xmlParser; 

     ScoreClass *score; 
    NSMutableArray *ScoreList; 
    } 

    @property(nonatomic, retain) NSString *address; 
    @property(nonatomic, retain) NSString *xmlNamespace; 
    @property(nonatomic, retain) NSString *operation; 
    @property(nonatomic, retain) NSString *parameters; 
    @property(nonatomic, retain) NSMutableString *inComeValue; 


    @property(retain, readwrite) NSMutableArray *ScoreList; 
    @property(nonatomic, retain) ScoreClass *score; 


    @end 

ScoreWebService.m

#import "ScoreWebService.h" 


@implementation ScoreWebService 

@synthesize operation, parameters, address, xmlNamespace, inComeValue, score; 
@synthesize ScoreList; 

-(id)init { 
    [super init]; 

     address   = [NSString stringWithFormat:@""]; 
    xmlNamespace = [NSString stringWithFormat:@""]; 
    operation  = [NSString stringWithFormat:@""]; 
    parameters  = [NSString stringWithFormat:@""]; 
    inComeValue  = [NSString stringWithFormat:@""]; 

    score = [[ScoreClass alloc]init]; 
    ScoreList = [[NSMutableArray alloc]init]; 
    return self; 
    } 

    -(NSMutableArray *)ScoreTableWebService{ 

    if (([address isEqualToString:@""]) || ([xmlNamespace isEqualToString:@""]) || ([operation isEqualToString:@""])) {  
    //return; 
    } 

    recordResults = FALSE; 

    NSString *soapMessage = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" "<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>" 
    "<BayiSatisTakipTablo6Oku xmlns=\"http://trigonservis.com/\">" 
    "<IstasyonKodu>34005</IstasyonKodu>" 
"<Gun1>02.01.2012</Gun1>"       
    "</BayiSatisTakipTablo6Oku>" 
"</soap:Body>" 
"</soap:Envelope>"        
]; 


     NSLog(@"Request SOAP = \n%@\n\n", soapMessage); 
    NSURL *url = [NSURL URLWithString:address]; 
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 


    [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
    [theRequest addValue: @"http://trigonservis.com/BayiSatisTakipTablo6Oku" forHTTPHeaderField:@"SOAPAction"]; 

   [theRequest addValue: soapMessage forHTTPHeaderField:@"Content-Length"]; 

    [theRequest setHTTPMethod:@"POST"]; 

    [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 

    //Connexion 
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 
    if(theConnection) { 
     webData = [[NSMutableData data] retain]; 
    } 
    else { 
    NSLog(@"there is a problem to connect webservices"); 
    } 

    while (!connectionFinished) { 
     [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; 
    } 

    return ScoreList; 
    } 


     -(void)connectionDidFinishLoading:(NSURLConnection *)connection { 
     NSString *theXML = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding]; 
     #if(TARGET_IPHONE_SIMULATOR) 
      NSLog(@"Reponse SOAP = \n%@\n\n", theXML); 
     #endif 

    [theXML release]; 

    // Appel futur du parser 
    if(xmlParser) 
     [xmlParser release]; 
    // Allocation du NSXMLParser 
    xmlParser = [[NSXMLParser alloc] initWithData: webData]; 
    // Désigne l'instance de la classe courante comme étant le delegate du NSXMLParser 
    [xmlParser setDelegate: self]; 
    [xmlParser setShouldResolveExternalEntities: YES]; 
    [xmlParser parse]; 

    [connection release]; 
    [webData release]; 

    connectionFinished = TRUE; 
    } 

    /************************************************************************************ 
    ** Connection */ 

    -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response   
    { 
    [webData setLength: 0]; 
    } 

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

    -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
     [connection release]; 
     [webData release]; 
    } 
    /************************************************************************************ 
    ** XML Parsing 
    */ 




    -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName 
     attributes: (NSDictionary *)attributeDict { 
     NSLog(@"elementName = %@ \n", elementName); 
     if([elementName isEqualToString:@"DagiticiSatis"]) 
      { 
     if(!soapResults) 
     soapResults = [[NSMutableString alloc] init]; 
        recordResults = TRUE; 

      } 
      else if([elementName isEqualToString:@"IstasyonAdi"]) 
      { 
      if(!soapResults) 
       soapResults = [[NSMutableString alloc] init]; 

      recordResults = TRUE; 
     } 
    return; 
    } 

    -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 

    if(recordResults){ 
     [soapResults appendString: string];  
    } 
    } 

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

    if([elementName isEqualToString:@"DagiticiSatis"]) { 
      #if(TARGET_IPHONE_SIMULATOR) 
       NSLog(@"ScoreID = %@ \n", soapResults); 
      #endif  
     score = [[ScoreClass alloc]init]; 
    score.MacID = soapResults; 
    [soapResults release]; 
    soapResults = nil; 
    } 
    else if([elementName isEqualToString:@"IstasyonAdi"]){ 
      #if(TARGET_IPHONE_SIMULATOR) 
       NSLog(@"IstasyonAdi = %@ \n", soapResults); 
      #endif 
     score.NickName = soapResults; 
    [soapResults release]; 
    soapResults = nil; 

    } 
     return ScoreList; 
     } 

    @end 

GridTableViewCell.h

#import <UIKit/UIKit.h> 

@interface GridTableViewCell : UITableViewCell { 
    UIColor *lineColor; 
    BOOL topCell; 

    UILabel *cell1; 
    UILabel *cell2; 
    UILabel *cell3; 
    } 

    @property (nonatomic, retain) UIColor* lineColor; 
    @property (nonatomic) BOOL topCell; 
    @property (readonly) UILabel* cell1; 
    @property (readonly) UILabel* cell2; 
    @property (readonly) UILabel* cell3; 

    @end 

GridTableViewCell.m

#import "GridTableViewCell.h" 

#define cell1Width 80 
#define cell2Width 80 
#define cellHeight 44 

@implementation GridTableViewCell 

@synthesize lineColor, topCell, cell1, cell2, cell3; 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 

{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
    topCell = NO; 

    // Add labels for the three cells 
    cell1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, cell1Width, cellHeight)]; 
    cell1.textAlignment = UITextAlignmentCenter; 

      cell1.backgroundColor = [UIColor clearColor]; // Important to set or lines will not appear 
    [self addSubview:cell1]; 

    cell2 = [[UILabel alloc] initWithFrame:CGRectMake(cell1Width, 0, cell2Width, cellHeight)]; 
    cell2.textAlignment = UITextAlignmentCenter; 
    cell2.backgroundColor = [UIColor clearColor]; // Important to set or lines will not appear 
    [self addSubview:cell2]; 

    cell3 = [[UILabel alloc] initWithFrame:CGRectMake(cell1Width+cell2Width, 0, 320-(cell1Width+cell2Width), cellHeight)]; // Note - hardcoded 320 is not ideal; this can be done better 
    cell3.textAlignment = UITextAlignmentCenter; 
    cell3.backgroundColor = [UIColor clearColor]; // Important to set or lines will not appear 
    [self addSubview:cell3]; 
     } 

      return self; 

     } 

     - (void)setSelected:(BOOL)selected animated:(BOOL)animated 
    { 
     [super setSelected:selected animated:animated]; 
     // Configure the view for the selected state 
    } 

     - (void)dealloc 
    { 
     [cell1 release]; 
     [cell2 release]; 
     [cell3 release]; 
     [super dealloc]; 
    } 

    - (void)drawRect:(CGRect)rect 
    { 

       CGContextRef context = UIGraphicsGetCurrentContext(); 
     CGContextSetStrokeColorWithColor(context, lineColor.CGColor);  

     // CGContextSetLineWidth: The default line width is 1 unit. When stroked, the line straddles the path, with half of the total width on either side. 
     // Therefore, a 1 pixel vertical line will not draw crisply unless it is offest by 0.5. This problem does not seem to affect horizontal lines. 
     CGContextSetLineWidth(context, 1.0); 

     // Add the vertical lines 
     CGContextMoveToPoint(context, cell1Width+0.5, 0); 
     CGContextAddLineToPoint(context, cell1Width+0.5, rect.size.height); 

     CGContextMoveToPoint(context, cell1Width+cell2Width+0.5, 0); 
     CGContextAddLineToPoint(context, cell1Width+cell2Width+0.5, rect.size.height); 

     // Add bottom line 
     CGContextMoveToPoint(context, 0, rect.size.height); 
     CGContextAddLineToPoint(context, rect.size.width, rect.size.height-0.5); 

     // If this is the topmost cell in the table, draw the line on top 
     if (topCell) 
     { 
      CGContextMoveToPoint(context, 0, 0); 
      CGContextAddLineToPoint(context, rect.size.width, 0); 
     } 

     // Draw the lines 
     CGContextStrokePath(context); 
    } 

    - (void)setTopCell:(BOOL)newTopCell 

    { 
     topCell = newTopCell; 
     [self setNeedsDisplay];   
    } 

    @end 

回答

2

1將委託表。從Web服務的NSMutableArray

2分配數據。

3寫入方法如下所述。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
//create cell here 

}

4呼叫

[tblView reloadData]; 
+0

[tblView reloadData];必須在哪裏? – Mhmt 2013-05-06 15:38:43

+1

一旦你從服務器獲得響應。 – andy 2013-05-07 07:01:14

相關問題