2016-04-18 8 views
0

私はココアで初心者です。私はPOSTココアPOSTの問題

を経由して、私のWSにデータを送信する場合、私は、私はエラーを得ている最後のファイルを継承させたいとき、私は一つの問題を持っている私は、今、すべての私のプロジェクトに継承するためのプログラム

// 
// 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 

をRequestPostています... NSObjectに割り当てる互換性のないポインタ型... request.delegado = self;

私はそれを修正するにはどうすればよい
-(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]; 
} 

を継承するとき

これは、コードのですか?

おかげrequestメソッドが含まれている.mファイルで&よろしく

+0

ここで説明されている 'RequestPost'はデリゲートのために必要なプロトコルを実装していません。' DelegadoRedPost' – Tim

答えて

0

は、あなたはクラスがDelegadoRedPostプロトコルに準拠していることを示していると、必要なプロトコルのメソッドを実装する必要があります。

@interface WhateverClassNameThisIs() <DelegadoRedPost> 

@end 

明らかに、このクラスの実際の名前でWhateverClassNameThisIsを置き換える:

はちょうど@implementation行の前にこれを追加します。

注意点として、あなたからdelegadoプロパティの宣言を変更する必要がありますに

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

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

は、2つの変更を注意してください - 代表団は、通常weak、ないstrongでなければなりません。これにより、参照サイクルが回避されます。また、タイプはidで、NSObjectではありません。プロトコル自体はNSObjectプロトコルを拡張します。

+0

このコードを表示して質問を更新してください。 – rmaddy

+0

ありがとうrmaddy私は、delegadoプロパティの宣言をどこで変更する必要があるのか​​わかりません。 –

+0

あなたは 'delegado'を宣言する行が1つしかありません。それはあなたの質問に掲載されています。私の答えの後半に示すように、その1行だけを変更してください。しかし、明確にするために、それはあなたの問題とは関係ありません。 – rmaddy