【问题标题】:Exception 'Invalid type in JSON write异常'JSON写入中的类型无效
【发布时间】:2021-12-26 21:31:03
【问题描述】:

我的界面如下所示:#import

#import <AVFoundation/AVFoundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface AVBase : NSObject

@property NSString *portName;

@property NSString *uid;

@property NSString* port;

- (id) initWithPortName:(NSString *)portName andUID:(NSString *)uid andPort:(AVAudioSessionPort)port;
@end

NS_ASSUME_NONNULL_END

还有.m 文件

@implementation AVBase
- (id)initWithPortName:(NSString *)portName andUID:(NSString *)uid andPort:(AVAudioSessionPort)port
{
  self = [super init];
  if (self)
  {
    self.portName = portName;
    self.uid = uid;
    self.port = [port description];
  }
  return self;
}
@end

我想为 AVAudioSession 创建一个当前输出数组,所以我这样做:

 NSMutableArray *myArray = [[NSMutableArray alloc] init];
  AVAudioSession *session = AVAudioSession.sharedInstance;
  NSArray *outputs = [[session currentRoute] outputs];
  for(AVAudioSessionPortDescription* output in outputs)
  {
    AVBase* av = [AVBase alloc];
    av = [av initWithPortNumber:output.portName andUID:output.UID andPort:output.portType];
    [myArray addObject:av];
  }
  NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:myArray options:NSJSONWritingPrettyPrinted error:&error];

但是当我尝试序列化 myArray 时,我收到一条错误消息:

Exception 'Invalid type in JSON write (AVBase)

我不明白出了什么问题,我类中的所有属性都是 NSString 类型,所以它应该可以工作。

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    NSJSONSerialization 仅接受 NSArrayNSDictionaryNSStringNSNumber(和 NSNull),用于其顶级,但也接受所有子级别/子属性。

    myArrayAVBase 的 NSArray,AVBase 不是其中之一。 您需要先将AVBase 转换为NSDictionary

    -(NSDictionary *)toDict {
        return @{@"portName": portName, @"uid": uid, @"port": port};
    }
    

    然后:

    [myArray addObject:[av toDict]];
    

    如果你不使用AVBase,或者只是为了它,你可以直接从AVAudioSessionPortDescription *output构造NSDictionary,这里不需要使用AVBase

    【讨论】:

      猜你喜欢
      • 2015-11-16
      • 2019-10-26
      • 2021-08-08
      • 2015-03-19
      • 2016-03-16
      • 2017-07-05
      • 2017-03-05
      • 2017-01-24
      相关资源
      最近更新 更多