首页 > 解决方案 > 使用 SwiftyJSON 导出的 Swift 框架面临:由于未捕获的异常而终止应用程序

问题描述

我正在创建 Swift 框架来解析一些要在 Objective C 项目中使用的 JSON 数据并面临这个错误:

这是我在 Swift 中添加到 SwiftyJson 库的框架代码

import Foundation

@objc public class parse : NSObject {
  public override init() {
  }

  var Api = "XXXXXXX"

  @objc public func parseJSON(){
    print("flag")

    let requestURL: NSURL = NSURL(string: Api)!
    let urlRequest: URLRequest = URLRequest(url: requestURL as URL)
    let session = URLSession.shared

    let task = session.dataTask(with: urlRequest as URLRequest) { (data, response, error) -> Void in
      if data != nil {
        do {
          let readableJSON =  try JSON(data: data!, options: JSONSerialization.ReadingOptions.mutableContainers)
          let Name = readableJSON["data"]["buttonText"].stringValue as String!
          let buttonTextColor = readableJSON["data"]["buttonTextColorCode"].stringValue as String!
          let buttonBackgroundColorCode = readableJSON["data"]["buttonBackgroundColorCode"].stringValue as String!
          let visibility = readableJSON["data"]["visibility"].boolValue
          let indexURL = readableJSON["data"]["indexURL"].stringValue as String!
          let authURL = readableJSON["data"]["authURL"].stringValue as String!
          let module = readableJSON["data"]["module"].stringValue as String!
          let alignment = readableJSON["data"]["alignment"].stringValue as String!

          print("\(Name!) \n \(buttonTextColor!) \n \(buttonBackgroundColorCode!) \n  \(indexURL!) \n \(alignment!)")

          print("done")
          print("Color value:\(buttonBackgroundColorCode!)")
        } catch {
          print(error)
        } 
      }  
    }

    task.resume()
  } 
}

这是我在 Objective C 中的项目:

#import "ViewController.h"

@import JSONFrameWork;
#import <JSONFrameWork/JSONFrameWork-Swift.h>
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  [[parse alloc]init];
  [[parse alloc]parseJSON];
}

@end

当我运行代码得到以下错误时,我怀疑 SwiftyJSON 在 ObjetiveC 中运行不正常

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initWithString:relativeToURL:]: nil string parameter'
*** First throw call stack:
(......) libc++abi.dylib: terminating with uncaught exception of type NSException

注意:这个框架在 Swift 项目中运行良好,这里是来自 API 的 JSON 响应:

{  
   "data":{  
      "buttonText":"\u067e\u06cc\u0634 \u0628\u06cc\u0646\u06cc \u06a9\u0646!",
      "buttonTextColorCode":"#000000",
      "buttonBackgroundColorCode":"#7ca2d246",
      "visibility":true,
      "indexURL":"XXXXXX",
      "authURL":"XXXXX",
      "module":"MATCH_PREDICTION",
      "alignment":"RIGHT_TOP",
      "marginTop":"10",
      "marginLeft":"10",
      "marginRight":"10",
      "marginBottom":"10",
      "allowChannels":[  
         "22",
         "52",
         "10"
      ]
   },
   "success":true
}

标签: objective-cswiftframeworksswifty-json

解决方案


推荐阅读