iOS 4.3支持AFNetworking - 可能出现什么问题?

时间:2012-12-17 12:35:34

标签: ios4 afnetworking

我已经开发了一个支持iOS 4.3+的应用程序。我想从ASIHTTPRequest转变 到AFNetworking,但在文档上说我应该使用0.10.x模块而不是当前模块。 https://github.com/AFNetworking/AFNetworking#requirements 使用AFNetworking的当前代码(1.x)的问题被称为(https://github.com/AFNetworking/AFNetworking/issues/545):

  1. 1.x
  2. 中的ARC介绍
  3. 使用NSJSONSerialization
  4. imp_implementationWithBlock()API差异
  5. 但iOS 4.3支持ARClite,并且通过1.x的代码,我没有遇到任何可能导致问题的弱引用的属性。 http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/ObjCAvailabilityIndex/_index.html iOS 4.3支持imp_implementationWithBlock() 只有两个引用使用NSJSONSerialization,我将它们更改为JSONKit调用 - >

    diff --git a/AFNetworking/AFHTTPClient.m b/AFNetworking/AFHTTPClient.m
    index 62fc30a..3a60da5 100755
    --- a/AFNetworking/AFHTTPClient.m
    +++ b/AFNetworking/AFHTTPClient.m
    @@ -24,6 +24,7 @@
    
     #import "AFHTTPClient.h"
     #import "AFHTTPRequestOperation.h"
    +#import "JSONKit.h"
    
     #import <Availability.h>
    
    @@ -163,7 +164,7 @@ - (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding
    
     static NSString * AFJSONStringFromParameters(NSDictionary *parameters) {
         NSError *error = nil;
    -    NSData *JSONData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:&error];;
    +    NSData *JSONData = [parameters JSONDataWithOptions:JKSerializeOptionNone error:&error];
    
         if (!error) {
             return [[NSString alloc] initWithData:JSONData encoding:NSUTF8StringEncoding];
    diff --git a/AFNetworking/AFJSONRequestOperation.m b/AFNetworking/AFJSONRequestOperation.m
    index 607f247..c7367dc 100755
    --- a/AFNetworking/AFJSONRequestOperation.m
    +++ b/AFNetworking/AFJSONRequestOperation.m
    @@ -21,6 +21,7 @@
     // THE SOFTWARE.
    
     #import "AFJSONRequestOperation.h"
    +#import "JSONKit.h"
    
     static dispatch_queue_t af_json_request_operation_processing_queue;
     static dispatch_queue_t json_request_operation_processing_queue() {
    @@ -66,7 +67,7 @@ - (id)responseJSON {
             if ([self.responseData length] == 0) {
                 self.responseJSON = nil;
             } else {
    -            self.responseJSON = [NSJSONSerialization JSONObjectWithData:self.responseData options:0 error:&error];
    +          self.responseJSON = [self.responseData objectFromJSONDataWithParseOptions:JKSerializeOptionNone error:&error];
             }
    
             self.JSONError = error;
    

    虽然编辑得很漂亮,但我仍然对这样做持怀疑态度。这是一个正确的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以更改一些内容以使AFNetworking&gt; = 1.0在iOS上进行编译&lt; 5,但不建议这样做,因为后续版本中可能会发生其他重大更改。

但是如果对创建一个无法包含主线错误修复和功能的分支感到满意,那么您的方法本身就没有任何错误。