我有一個如下所示的界面:#import <Foundation/Foundation.h>
#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所以它應該可以作業。
uj5u.com熱心網友回復:
NSJSONSerialization僅接受NSArray, NSDictionary, NSString, NSNumber(and NSNull) 作為其頂級,但也接受所有子級別/子屬性。
myArray是一個 NSArray AVBase,并且AVBase不是其中之一。您需要先將an 轉換AVBase為 a NSDictionary。
-(NSDictionary *)toDict {
return @{@"portName": portName, @"uid": uid, @"port": port};
}
然后:
[myArray addObject:[av toDict]];
如果您不使用AVBase,或者只是為了它,您可以NSDictionary直接從構造AVAudioSessionPortDescription *output,無需使用AVBase此處。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/358533.html
