从 AFNetworking 切换到 RestKit

Posted

技术标签:

【中文标题】从 AFNetworking 切换到 RestKit【英文标题】:Switching from AFNetworking to RestKit 【发布时间】:2013-01-07 08:46:17 【问题描述】:

我开始使用 AFNetworking 开发我的应用程序。一切都很顺利,直到我想使用核心数据。我知道还有一个额外的类(AFIncrementalStore)。但是因为我是 ios 开发的新手,并且没有太多关于这方面的信息。我决定改用 RestKit,因为这里有更多信息。现在,我学习了关于 AFNetworking 的教程。这里我创建了一个API类,这个方法在里面。

+(API *)sharedInstance

    static API *sharedInstance = nil;
    static dispatch_once_t oncePredicate;
    dispatch_once(&oncePredicate, ^ 
        sharedInstance = [[self alloc]initWithBaseURL:[NSURL URLWithString:kAPIHost]];
    );
    return sharedInstance;


#pragma mark - init
//intialize the API class with the destination host name

-(API *)init

    //call super init
    self = [super init];

    if (self != nil)
        //initialize the object
        user = nil;

        [self registerHTTPOperationClass:[AFJSONRequestOperation class]];

        // Accept HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1
        [self setDefaultHeader:@"Accept" value:@"application/json"];
    
    return self;


-(void)loginCommand:(NSMutableDictionary *)params onCompletion:(JSONResponseBlock)completionBlock
    NSLog(@"%@%@",kAPIHost,kAPILogin);
    NSMutableURLRequest *apiRequest = [self multipartFormRequestWithMethod:@"POST" path:kAPILogin parameters:params constructingBodyWithBlock:^(id <AFMultipartFormData>formData)
        //TODO: attach file if needed

    ];
    AFJSONRequestOperation *operation = [[AFJSONRequestOperation alloc] initWithRequest:apiRequest];
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
        //success!
        NSLog(@"SUCCESSSS!");
        completionBlock(responseObject);
    failure:^(AFHTTPRequestOperation *operation, NSError *error)
        //Failure
        NSLog(@"FAILUREE!");
        completionBlock([NSDictionary dictionaryWithObject:[error localizedDescription] forKey:@"error"]);
    ];
    [operation start];


这处理了我的网络服务和应用程序之间的通信。 在 viewControler 本身中,我这样调用这个方法。

   /*  [[API sharedInstance] loginCommand:[NSMutableDictionary dictionaryWithObjectsAndKeys:_txtLogin.text,@"email",_txtPass.text,@"pwd", nil] onCompletion:^(NSDictionary *json)
     //completion
         if(![json objectForKey:@"error"])
             NSLog(@"status %@",[json valueForKeyPath:@"data.status"]);
             if([[json valueForKeyPath:@"data.status"]intValue] == 200)
                  // Everything is oké, and login is succesfull
             else
                 //show validation
             
         else 
             NSLog(@"Cannot connect to the server");
         
     ];*/

这就是我在 AFnetworking 中的做法。但是当我在 RestKit 中这样做时有什么区别。我搜索了教程。但是在从 RestKit 1.0 更新到 2.0 之后,很多这些教程都已经过时了。所以我希望有人能帮我解决这个问题!

亲切的问候!

【问题讨论】:

【参考方案1】:

我使用本教程来使用 RestKit。它向您展示了如何使用它,您可以了解其他详细信息。 http://www.youtube.com/watch?v=dFi9t8NW0oY

【讨论】:

请避免发布仅链接的答案;他们意外消失,他们的内容无法搜索,很难看出他们是否真的回答了问题。

以上是关于从 AFNetworking 切换到 RestKit的主要内容,如果未能解决你的问题,请参考以下文章

从 AFNetworking 1.3 迁移到 AFNetworking 2.0 的问题

当应用程序移动到后台时,AFNetworking 3.0 继续上传

AFNetworking 2 + SwiftyJSON

我们是不是应该考虑从 AFNetworking 过渡到 NSUrlSession? [关闭]

将代码从 AFNetworking 2 迁移到 3

AFNetworking 从 1.x 迁移到 3.x