2014-02-12 2 views
0

내 응용 프로그램에서 하나의 정적 라이브러리를 사용하고 있습니다. 그 라이브러리에서 나는 서버와의 연결을위한 코드를 구현했다. 서버 상호 작용에 대해서는 NSURLSession을 사용했지만 UI 응답을 지연시키지 않아야합니다. NSURLConnection 대리자 메소드를 사용하기 시작했습니다. 서버에서 응답을 얻지 만 여기에서 실제 코드로 응답을 보내는 방법을 알지 못합니다.로드가 완료되었습니다. 방법.ios에서 정적 라이브러리의 응답을 얻는 방법

우리 팀에서는이 라이브러리를 iphone 및 ipad 개발 엔지니어에게 배포하고 싶습니다. 그들은 정적 라이브러리에서 구현 한 모든 서버 관련 코드를 제어하지 못합니다. 그러니 내 문제에 대한 솔루션을 미리 보여 주셔서 감사합니다.

StaticClass :

.H 파일

@interface StaticClass : NSObject<NSURLConnectionDelegate,NSURLSessionDelegate> 

{ 
NSMutableDictionary *responseDictionary; 
NSUserDefaults *serviceURlInUserDefaults; 
NSData *responseData; 

} 
@property (nonatomic, weak) id <DataReciverDelegate>delegate; 
@property(strong,nonatomic)NSData *responseData; 


-(void)loginWithUsername:(NSString *)name password:(NSString*)password serviceUrl:(NSString*)serviceUrl domainName:(NSString*)domainName ; 


@end 

수입 "StaticClass.h"

@protocol DataReciverDelegate <NSObject> 

@required 
- (void)responseDictionary:(NSDictionary *)response; 

@end 


@implementation StaticClass 
@synthesize responseData; 


-(void)loginWithUsername:(NSString *)name password:(NSString*)password serviceUrl:(NSString*)serviceUrl domainName:(NSString*)domainName 
{ 

NSString *ApiStr=[NSString stringWithFormat:@“http://login.com”]; 

    NSURL *Url=[[NSURL alloc]initWithString:[loginApiStr stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]]; 

    NSURLRequest *ApiRequest=[NSURLRequest requestWithURL:loginUrl]; 

    NSURLConnection *connection=[[NSURLConnection alloc]initWithRequest:ApiRequest delegate:self]; 
    [connection start]; 

} 

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

} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 

} 

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

    self.responseData=data; 

} 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 


    responseDictionary=[NSJSONSerialization JSONObjectWithData:self.responseData options:0 error:nil]; 

    [_delegate responseDictionary:responseDictionary]; 

} 

@end 

아래는 내가 정적 라이브러리를 하나 개의 클래스에서 사용되는 코드입니다

사용하려는 응답이 class1에 있습니다.

는 다음 날 나는 당신이 그 응답을 알리는 제공 API 중 하나가 연결에서 읽은 수

@interface Class1 : NSObject<NSURLConnectionDelegate,NSURLSessionDelegate> 

{ 

} 

@end 

@implementation Class1 


-(void)login 
{ 
StaticClass *object1=[[StaticClass alloc]init]; 

[object loginWithUsername:@“AAA” password:@“BBB” serviceUrl:url domainName:dname]; 

} 

답변

1

내가 정적 라이브러리 클래스에서 만든 위임을 포함 할 수있는 방법을 알려 주시기 바랍니다, 또는 당신은 알림을 보낼 수 있습니다 .

위임 프로토콜을 구현하고 사용 앱에서 대리인을 설정하거나 사용 앱이 이벤트를 처리하도록 블록을 설정하는 블록 기반 API를 사용하여 첫 번째 작업을 수행 할 수 있습니다. NSUrlConnection을 포함하여 시스템 제공 API에서이 두 패턴을 매우 자주 볼 수 있습니다.

또 다른 옵션은 알림을 사용하는 것입니다. 사용중인 앱에서 특정 알림 이름을 등록하고 연결에서 데이터를 반환하면 게시하는 lib에 등록합니다. 같은 또한이 속성을 선언

@protocol DataReciverDelegate <NSObject> 

@required 
- (void)dataReceived:(NSData *)data; 

@end 

:

1

당신은 같은 정적 라이브러리에서 프로토콜을 구현해야 정적 라이브러리 구현에서

@property (nonatomic, weak) id <DataReciverDelegate>delegate; 

, 구현 connectionDidFinishLoading 같은 :

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    [_delegate dataReceived:_dataYouReceived]; 
} 

이제을 구현해야합니다.3210 클래스에서 데이터를 가져와야하고 정적 라이브러리 클래스의 개체를 만들 때 대리자를 설정합니다.

+0

안녕하세요, 감사합니다. DataReciverDelegate의 구현은 데이터를 가져와야한다는 것을 의미합니다. 정적 라이브러리에서 정의 된 클래스에서 재정의해야한다는 것을 의미합니까? 그리고 한 가지 더 클래스에서 대리자 메서드를 구현해야합니다. 다음에는 클래스의 라이브러리 객체에 대한 대리자를 설정하는 방법을 알려주십시오. – Naresh

+0

@Naresh : 데이터를 가져 오는 데 필요한 클래스에 DataReceiverDelegate를 구현해야합니다. 정적 라이브러리 클래스의 객체를 만들면 델리게이트를 자 체로 설정합니다 –

+0

안녕하세요 미훈이 정말 고마워요.나는 대리자를 설정하는 데 약간 혼란 스럽다. 어디에서 대리인을 설정할 수 있는지 말해 줄 수 있겠 니? 나는 샘플 코드로 내 질문을 편집했다. 코드를 통해 제발 그 장소를 알려주시겠습니까? – Naresh