在我的应用程序中,我使用的是一个静态库。在该库中,我实现了用于与服务器建立连接的代码。对于服务器交互,我使用了NSURLSession
但是它延迟了UI响应以避免它我现在开始使用NSURLConnection
委托方法我从服务器获得响应但是在这里我不知道如何发送响应从完成加载方法回到实际代码。
在我的团队中,我想将此库分发给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
@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中:
请告诉我如何在静态库类
中包含该委托@interface Class1 : NSObject<NSURLConnectionDelegate,NSURLSessionDelegate>
{
}
@end
@implementation Class1
-(void)login
{
StaticClass *object1=[[StaticClass alloc]init];
[object loginWithUsername:@“AAA” password:@“BBB” serviceUrl:url domainName:dname];
}
答案 0 :(得分:1)
您可以提供API以通知已从连接中读取响应,或者您可以发送通知。
第一个可以通过实现委托协议和在using app中设置委托,或者使用基于块的API来完成,其中using app将设置块来处理事件。您可以在系统提供的API中经常看到这两种模式,包括NSUrlConnection
。
另一种选择是使用通知。您在using应用程序中注册了特定的通知名称,并在您的连接返回数据后在lib中注册。
答案 1 :(得分:1)
您需要在静态库中实现协议,如:
@protocol DataReciverDelegate <NSObject>
@required
- (void)dataReceived:(NSData *)data;
@end
同样在那里声明一个属性:
@property (nonatomic, weak) id <DataReciverDelegate>delegate;
在静态库实现中,实现connectionDidFinishLoading
之类的:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
[_delegate dataReceived:_dataYouReceived];
}
现在,您需要在获取数据所需的类中实现DataReciverDelegate
,并且在创建静态库类的对象时,请设置委托。