Ios AFNetworking请求是否应放置在与视图控制器分离的NSObject中?

Ios AFNetworking请求是否应放置在与视图控制器分离的NSObject中?,ios,objective-c,model-view-controller,afnetworking,nsobject,Ios,Objective C,Model View Controller,Afnetworking,Nsobject,试图改进我的编码风格,我想知道什么是正确的处理方式。是否应该将它们放置在与视图控制器分开的NSObjects中,是否有任何开源的干净代码示例供我在线参考?如果您的应用程序将依赖于构造,那么创建一个模型总是一个好主意。也就是说,如果你正在构建一个包含tableview或完整照片的应用程序,最好为照片创建一个模型 以下是几个例子: 在本教程中,了解填充表格视图的最佳方法,以及模型、单元格和表格视图之间的关系如何工作 这是为tableview构建模型的端到端演练,然后填充tableview 全面了解

试图改进我的编码风格,我想知道什么是正确的处理方式。是否应该将它们放置在与视图控制器分开的NSObjects中,是否有任何开源的干净代码示例供我在线参考?

如果您的应用程序将依赖于构造,那么创建一个模型总是一个好主意。也就是说,如果你正在构建一个包含tableview或完整照片的应用程序,最好为照片创建一个模型


以下是几个例子:

在本教程中,了解填充表格视图的最佳方法,以及模型、单元格和表格视图之间的关系如何工作

这是为tableview构建模型的端到端演练,然后填充tableview

全面了解模型如何适应MVC模式


如果要从JSON响应中构造对象,请执行以下操作:

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:&error];

// Sanity check
if ([json isKindOfClass:[NSDictionary class]]){
    NSArray *jsonArray = json[@"items"];

    // Sanity check
    if ([jsonArray isKindOfClass:[NSArray class]]){
        // Here you go through all your items one by one
        for (NSDictionary *dictionary in jsonArray) {
            Model *staff = [[Staff alloc] init];
            model.id = [dictionary objectForKey:@"id"];
            model.name = [dictionary objectForKey:@"name"];
            model.attribute = [dictionary objectForKey:@"attribute"]; 
            // Do this for all your attributes

            [arrayContainingObjects addObject:model];
        }
    }
}

如果你的应用程序将依赖于一个构造,那么创建一个模型总是一个好主意。也就是说,如果你正在构建一个包含tableview或完整照片的应用程序,最好为照片创建一个模型


以下是几个例子:

在本教程中,了解填充表格视图的最佳方法,以及模型、单元格和表格视图之间的关系如何工作

这是为tableview构建模型的端到端演练,然后填充tableview

全面了解模型如何适应MVC模式


如果要从JSON响应中构造对象,请执行以下操作:

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:&error];

// Sanity check
if ([json isKindOfClass:[NSDictionary class]]){
    NSArray *jsonArray = json[@"items"];

    // Sanity check
    if ([jsonArray isKindOfClass:[NSArray class]]){
        // Here you go through all your items one by one
        for (NSDictionary *dictionary in jsonArray) {
            Model *staff = [[Staff alloc] init];
            model.id = [dictionary objectForKey:@"id"];
            model.name = [dictionary objectForKey:@"name"];
            model.attribute = [dictionary objectForKey:@"attribute"]; 
            // Do this for all your attributes

            [arrayContainingObjects addObject:model];
        }
    }
}

一般来说,最好将访问后端服务器的代码与UI组件分开。一个最好的理由是,通常需要多个UI组件访问相同的服务器调用

就示例而言,可能有数千个。但也许更好的办法是阅读设计模式和应用程序架构模式等内容


objc.io对这些主题有一些介绍。给你。还有很多其他的,只有谷歌搜索。

一般来说,最好将访问后端服务器的代码与UI组件分开。一个最好的理由是,通常需要多个UI组件访问相同的服务器调用

就示例而言,可能有数千个。但也许更好的办法是阅读设计模式和应用程序架构模式等内容


objc.io对这些主题有一些介绍。给你。还有很多其他的,只有谷歌搜索。

使用通用NSObject类通过AFNetworking 2.0调用WS 首先使用任意名称创建NSObject类我正在创建名为Webservice.hWebservice.m

Webservice.h

@interface Webservice : NSObject

+ (void)callWSWithUrl:(NSString *)stUrl parmeters:(NSDictionary *)parameters success:(void (^)(NSDictionary *response))success failure:(void (^)(NSError *error))failure;

@end
Webservice.m您的nsobject.m文件如下所示。(在.m文件中添加两个函数)

确保您必须用success和success替换字典密钥 处理Response回调函数的消息

这样使用从任何viewcontroller.m调用此常用方法,并从任何viewcontroller调用任何方法。对于临时,我使用viewDidLoad调用此WS

- (void)viewDidLoad {
    [super viewDidLoad];

    NSDictionary *dictParam = @{@"parameter1":@"value1",@"parameter1":@"value2"};

    [WebClient requestWithUrlWithResultVerificationWithLoder:@"add your webservice URL here" parmeters:dictParam success:^(NSDictionary *response) {
        //Success
        NSLog(@"responce:%@",response);
        //code here...

    } failure:^(NSError *error) {
        //Error
        NSLog(@"error:%@",error.localizedDescription);
    }];


}

在upper方法中添加您的参数、值和webservice URL。您可以轻松地使用这个nsobjset类。有关更多详细信息,请访问或。

使用通用NSObject类通过AFNetworking 2.0调用WS 首先使用任意名称创建NSObject类我正在创建名为Webservice.hWebservice.m

Webservice.h

@interface Webservice : NSObject

+ (void)callWSWithUrl:(NSString *)stUrl parmeters:(NSDictionary *)parameters success:(void (^)(NSDictionary *response))success failure:(void (^)(NSError *error))failure;

@end
Webservice.m您的nsobject.m文件如下所示。(在.m文件中添加两个函数)

确保您必须用success和success替换字典密钥 处理Response回调函数的消息

这样使用从任何viewcontroller.m调用此常用方法,并从任何viewcontroller调用任何方法。对于临时,我使用viewDidLoad调用此WS

- (void)viewDidLoad {
    [super viewDidLoad];

    NSDictionary *dictParam = @{@"parameter1":@"value1",@"parameter1":@"value2"};

    [WebClient requestWithUrlWithResultVerificationWithLoder:@"add your webservice URL here" parmeters:dictParam success:^(NSDictionary *response) {
        //Success
        NSLog(@"responce:%@",response);
        //code here...

    } failure:^(NSError *error) {
        //Error
        NSLog(@"error:%@",error.localizedDescription);
    }];


}


在upper方法中添加您的参数、值和webservice URL。您可以轻松地使用这个nsobjset类。有关更多详细信息,请访问或。

但为什么我从未在NSObjects中看到afnetworking请求的任何代码示例?答案将取决于您看到的示例,如果只是一个快速教程示例,那么它可能又快又脏,因此他们不需要演示如何使用模型(NSObject)。但为什么我从来没有在NSObject中看到任何afnetworking请求的代码示例?答案取决于您看到的示例,如果只是一个快速教程示例,那么它可能又快又脏,因此他们不需要显示如何使用模型(NSObject)。是的!。您使用的是哪种AFNetworking AFNetworking 2.0还是3.0?我有一些代码剪贴可以帮助您。我在哪里可以找到它们?我使用的是2.0 AFNetworking我会上传给我一些时间。是的!。您使用的是哪种AFNetworking?AFNetworking 2.0还是3.0?我有一些代码剪贴可以帮助您。我在哪里可以找到它们?我使用的是2.0 AFNetworking。我将上载给我一些时间。对于第一个函数,我得到一个未知的类方法,即使它在中声明。h@ChuckKelly请详细写下你的错误。请一个好的程序员从来不会写相同的代码x2,所以我不应该找到一种方法来保持发出请求的方法中包含的失败块,因为在发生错误时应该发生的事情是通用的。我为第一个函数得到一个未知的类方法,即使它在。h@ChuckKelly请把你的错误写在细节请一个好的程序员从来不会写相同的代码x2,所以我不应该找到一种保持f的方法吗