2016-04-18 10 views
0

Ich bin Neuling mit Kakao. Ich habe ein Problem, wenn ich Daten zu meinem WS über POST senden magCocoa POST Ausgabe

ich RequestPost Programm auf all meinen Projekten

// 
// RequestPost.h 
// 
// Created by Roberto on 10/01/13. 
// Copyright (c) 2013 CEM. All rights reserved. 
// 
#import <Foundation/Foundation.h> 

@protocol DelegadoRedPost <NSObject> 

-(void) terminaDescarga:(NSData*)datos conID:(NSInteger) id; 
-(void) errorDescarga:(NSInteger)codigo conID:(NSInteger) id; 

@end 

@interface RequestPost : NSObject <NSURLConnectionDelegate> 

@property (strong, nonatomic) NSObject <DelegadoRedPost> *delegado; 
@property (nonatomic) NSInteger id; 
@property (nonatomic, strong) NSMutableData *buffer; 
@property (nonatomic, strong) NSURLConnection *conexion; 

-(void)descargar:(NSString*)direccion datosPost:(NSString*)datos conId:(NSInteger)id; 


@end 

// 
// RequestPost.m 
// 
// Created by Roberto on 10/01/13. 
// Copyright (c) 2013 CEM. All rights reserved. 
// 

#import "RequestPost.h" 

@implementation RequestPost 

-(void)descargar:(NSString*)direccion datosPost:(NSString*)datos conId:(NSInteger)id 
{ 
    self.id = id; 

    NSURL *url   = [NSURL URLWithString:direccion]; 

    NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url]; 
    //NSString *strLength = [NSString stringWithFormat:@"%d", datos.length]; aqui comento 18 abr 2016 
    NSString *strLength = [NSString stringWithFormat:@"%lu", (unsigned long)datos.length]; 

    [req addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 

    [req addValue:strLength forHTTPHeaderField:@"Content-Length"]; 
    [req setHTTPMethod:@"POST"]; 
    [req setHTTPBody:[datos dataUsingEncoding:NSUTF8StringEncoding]]; 


    self.conexion = [[NSURLConnection alloc] initWithRequest:req delegate:self]; 

    if(self.conexion){ 
     self.buffer = [NSMutableData data]; 
    } 
} 

#pragma mark - Métodos del Delegado de NSURLConnection 

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    self.buffer.length = 0; 
} 

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 

    [self.buffer appendData:data]; 
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{ 
    [self.delegado terminaDescarga:self.buffer conID:self.id]; 
} 

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ 

    [self.delegado errorDescarga:error.code conID:self.id]; 
} 

@end 

Nun erben, als ich die letzte Datei erben wollen habe ich einen Fehler bekommen .... Inkompatible Zeigertypen, die NSObject zuweisen ... In der Zeile request.delegado = self;

Dies ist der Code, wenn

erben
-(void) request 
{ 
    RequestPost *request = [[RequestPost alloc] init]; 
    request.delegado = self; 
    NSString *postStr = [NSString stringWithFormat:@"datos=%@",self.json]; 
    NSString *strUrl = @"http://www.futho7.com/WebService/subir_datos.php"; 
    [request descargar:strUrl datosPost:postStr conId:100]; 
} 

Wie kann ich es beheben?

Dank & Grüße

+0

'RequestPost', wie es hier beschrieben wird, implementiert nicht das erforderliche Protokoll für den Delegaten' DelegadoRedPost' – Tim

Antwort

0

In der .m-Datei, die die request Methode enthält, müssen Sie zeigen, dass die Klasse mit dem Verfahren DelegadoRedPost Protokoll und Umsetzung des erforderlichen Protokolls entspricht.

Fügen Sie diese kurz vor der @implementation Linie:

@interface WhateverClassNameThisIs() <DelegadoRedPost> 

@end 

Offensichtlich WhateverClassNameThisIs mit dem tatsächlichen Namen dieser Klasse ersetzen.

Als Randbemerkung, sollten Sie die Deklaration der von delegado Eigenschaft ändern:

@property (strong, nonatomic) NSObject <DelegadoRedPost> *delegado; 

zu:

@property (weak, nonatomic) id<DelegadoRedPost> *delegado; 

Beachten Sie die zwei Änderungen - Delegierten normalerweise weak sein sollte, nicht strong. Dies vermeidet Referenzzyklen. Und der Typ sollte mit id, nicht NSObject sein. Das Protokoll selbst erweitert das Protokoll NSObject.

+0

Aktualisieren Sie Ihre Frage mit diesem Code. – rmaddy

+0

danke rmaddy Ich finde nicht, wo ich die Deklaration der delegado-Eigenschaft ändern muss –

+0

Sie haben nur eine Zeile, die den 'delegado' deklariert. Es ist in Ihrer Frage veröffentlicht. Ändere einfach die eine Zeile, wie ich sie in der zweiten Hälfte meiner Antwort zeige. Aber um klar zu sein, das hat nichts mit Ihrem Problem zu tun. – rmaddy