iphone - 所有输出结果都有效,但 TableView 未从 iPhone 中的 Web 服务加载数据

标签 iphone xcode web-services

我想从 iPhone 应用程序中的 Web 服务将数据加载到表格 View 。所有输出都正常工作,但我的表不包含任何数据。它是空的。

我没有发现应用程序有任何错误。为什么 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

最佳答案

1 设置表的委托(delegate)。

2 将 Web 服务中的数据分配给 NSMutableArray。

3 编写下面提到的方法。

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

}

4次通话

  [tblView reloadData];

关于iphone - 所有输出结果都有效,但 TableView 未从 iPhone 中的 Web 服务加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16396761/

相关文章:

iphone - 核心图 iPhone 动画示例

iphone - UITapGestureRecognizer 忽略网络链接请求

DrawerController 的 iOS 状态恢复问题

ios - Xcode PlayGround 不显示这些场景的 View

swift - 不支持 CoreBluetooth

iphone - 在没有 Xcode 的情况下创建 iPhone 应用程序

iphone - 在 View 中添加多个标签

asp.net - IOS 上无服务器多人游戏

java - servlet 和 web 服务之间的区别

c# - .NET Web 服务 - 如何调用非托管 C dll