iOS-通过单例实现连接到服务器

萨拉·舒米卡(Sara Shumika)

我的服务器上有带有其余APLI的json文件,我想与服务器通信,现在我用此方法连接到服务器,并在viewdidload方法中调用它,我的问题是,执行此操作的最佳方法是什么,可以我用单身人士吗?如果是,它应该是什么样子?提前致谢!

感谢答案部分中的任何代码建议。

- (void)viewDidLoad
{
 [super viewDidLoad];

 _mapView.showsUserLocation = YES;
 _mapView.delegate = self;
    [self fetchData];
}



 -(void)fetchData
{
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:BASED_URL]];
[request setHTTPMethod:@"GET"];
[request setValue:@"/json;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];

NSURLResponse *response;
NSData *GETReply = [NSURLConnection sendSynchronousRequest:request 
returningResponse:&response error:nil];
NSString *theReply = [[NSString alloc] initWithBytes:[GETReply bytes] length:[GETReply 
length] encoding: NSASCIIStringEncoding];


CLLocationCoordinate2D location;                         
NSMutableArray *newAnnotations = [NSMutableArray array]; 
NSError *error;
NSArray *array = [NSJSONSerialization JSONObjectWithData:GETReply
                                                 options:0
                                                   error:&error];
if (error != nil)
{
    // handle the error 
}

for (NSDictionary *dictionary in array)
{

    location.latitude = [dictionary[@"latitude"] doubleValue];
    location.longitude = [dictionary[@"longitude"] doubleValue];

    // create the annotation
    MyAnnotation *newAnnotation;


    newAnnotation = [[MyAnnotation alloc] init];
    newAnnotation.company = dictionary[@"company"];

    newAnnotation.coordinate = location;

    [newAnnotations addObject:newAnnotation];
}
[self.mapView addAnnotations:newAnnotations];
}

更新:基于注释,Singleton不需要执行网络功能,也不建议这样做。

我该如何改善这些代码,如果您能为我提供改善代码的解决方案,不胜感激

发声的

根据我的评论。

Singleton用于在整个应用中创建单个实例。在进行网络活动的情况下,不建议使用Singleton,因为您可能需要一次创建多个网络连接,这将无法正常工作。您可能会选择静态函数,一些好的库希望AFNetworking减少代码。同样,您也应该使用asynchronous网络活动,而不是synchronous因为它会block app activity花费一些时间来获取数据。

要修改您的代码,您可以遵循以下代码。

创建一个ApiManager将进行所有网络活动类,将所有代码放入该类中。请参见下文

ApiManager.h

进口

@interface ApiManager : NSObject
+(void)fetchCoordinates:(void (^) (id result))success failure:(void (^) (NSError *error))failure;
@end

ApiManager.m

#import "ApiManager.h"

#define BASED_URL @""


@implementation ApiManager
+(void)fetchCoordinates:(void (^) (id result))success failure:(void (^) (NSError *error))failure{
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:BASED_URL]];
    [request setHTTPMethod:@"GET"];
    [request setValue:@"/json;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];

    NSURLResponse *response;
    NSData *GETReply = [NSURLConnection sendSynchronousRequest:request
                                             returningResponse:&response error:nil];

    NSError *error;
    NSArray *array = [NSJSONSerialization JSONObjectWithData:GETReply
                                                     options:0
                                                       error:&error];

    if(!error){
        success(array);
    }else
        failure(error);

}
@end

Usage

[ApiManager fetchCoordinates:^(id result) {

     NSArray *array=(NSArray*)result;

     NSMutableArray *newAnnotations = [NSMutableArray array]; 

     for (NSDictionary *dictionary in array)
     {

     location.latitude = [dictionary[@"latitude"] doubleValue];
     location.longitude = [dictionary[@"longitude"] doubleValue];

     // create the annotation
     MyAnnotation *newAnnotation;


     newAnnotation = [[MyAnnotation alloc] init];
     newAnnotation.company = dictionary[@"company"];

     newAnnotation.coordinate = location;

     [newAnnotations addObject:newAnnotation];
 }
 [self.mapView addAnnotations:newAnnotations];
} failure:^(NSError *error) {

}];

希望能帮助到你。

干杯。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

iOS-通过单例实现连接到服务器

来自分类Dev

使用 alamofire 通过 iOS 应用程序连接到 Windows SSL 服务器

来自分类Dev

iOS应用无法连接到MobileFirst服务器

来自分类Dev

ExpoCLI- IOS无法连接到服务器

来自分类Dev

iOS WebSocket无法使用SocketRocket连接到服务器

来自分类Dev

在iOS 9中通过IP地址通过IP地址连接到服务器时,kCFStreamErrorDomainSSL,-9802

来自分类Dev

webView:didFailLoadWithError -1004:在Phonegap ios中连接google plus时无法连接到服务器

来自分类Dev

iOS本机无法连接到MFP服务器:需要使用安全连接

来自分类Dev

在iOS中实现本地服务器

来自分类Dev

如何从iOS应用连接到后端服务器?如何读取,修改和获取数据到后端服务器?

来自分类Dev

使用Swift将iOS应用连接到sockJs服务器

来自分类Dev

iOS-推送通知,连接到Apple APNS服务器的SSL错误

来自分类Dev

calabash-ios在尝试连接到物理设备上的服务器时始终超时

来自分类Dev

php codeigniter网站显示未连接到Safari iOS手机中的服务器

来自分类Dev

尝试连接到iOS上的TCP服务器的SIGBART错误

来自分类Dev

iOS连接到PHP Web服务器将数据插入到MySQL

来自分类Dev

iOS-推送通知,连接到Apple APNS服务器的SSL错误

来自分类Dev

mobilefirst ios混合应用程序无法连接到生产服务器

来自分类Dev

通过iOS设备连接时无法从本地服务器获取响应

来自分类Dev

如何在目标C中的ios中通过XMPPFramework连接XMPP服务器

来自分类Dev

iOS上的Safari无法Ajax上载某些图像文件:“无法连接到服务器”(但网站正常)

来自分类Dev

iOS客户端使用套接字机制连接到服务器会导致“遇到流结束”

来自分类Dev

切换Google开发人员帐户后,无法在iOS应用中连接到GCM服务器

来自分类Dev

iOS上的Safari无法Ajax上载某些图像文件:“无法连接到服务器”(但网站正常)

来自分类Dev

PHP服务器中的iOS Push实现

来自分类Dev

PHP服务器中的iOS Push实现

来自分类Dev

XMPP iOS:无法连接Openfire服务器

来自分类Dev

iOS通过ASP将图像上传到服务器

来自分类Dev

无法连接到服务器(通过远程连接)

Related 相关文章

  1. 1

    iOS-通过单例实现连接到服务器

  2. 2

    使用 alamofire 通过 iOS 应用程序连接到 Windows SSL 服务器

  3. 3

    iOS应用无法连接到MobileFirst服务器

  4. 4

    ExpoCLI- IOS无法连接到服务器

  5. 5

    iOS WebSocket无法使用SocketRocket连接到服务器

  6. 6

    在iOS 9中通过IP地址通过IP地址连接到服务器时,kCFStreamErrorDomainSSL,-9802

  7. 7

    webView:didFailLoadWithError -1004:在Phonegap ios中连接google plus时无法连接到服务器

  8. 8

    iOS本机无法连接到MFP服务器:需要使用安全连接

  9. 9

    在iOS中实现本地服务器

  10. 10

    如何从iOS应用连接到后端服务器?如何读取,修改和获取数据到后端服务器?

  11. 11

    使用Swift将iOS应用连接到sockJs服务器

  12. 12

    iOS-推送通知,连接到Apple APNS服务器的SSL错误

  13. 13

    calabash-ios在尝试连接到物理设备上的服务器时始终超时

  14. 14

    php codeigniter网站显示未连接到Safari iOS手机中的服务器

  15. 15

    尝试连接到iOS上的TCP服务器的SIGBART错误

  16. 16

    iOS连接到PHP Web服务器将数据插入到MySQL

  17. 17

    iOS-推送通知,连接到Apple APNS服务器的SSL错误

  18. 18

    mobilefirst ios混合应用程序无法连接到生产服务器

  19. 19

    通过iOS设备连接时无法从本地服务器获取响应

  20. 20

    如何在目标C中的ios中通过XMPPFramework连接XMPP服务器

  21. 21

    iOS上的Safari无法Ajax上载某些图像文件:“无法连接到服务器”(但网站正常)

  22. 22

    iOS客户端使用套接字机制连接到服务器会导致“遇到流结束”

  23. 23

    切换Google开发人员帐户后,无法在iOS应用中连接到GCM服务器

  24. 24

    iOS上的Safari无法Ajax上载某些图像文件:“无法连接到服务器”(但网站正常)

  25. 25

    PHP服务器中的iOS Push实现

  26. 26

    PHP服务器中的iOS Push实现

  27. 27

    XMPP iOS:无法连接Openfire服务器

  28. 28

    iOS通过ASP将图像上传到服务器

  29. 29

    无法连接到服务器(通过远程连接)

热门标签

归档