Ios JSON错误-JSON写入(Posm)中的类型无效
我在实体类上有一个数组(使用Posm名称)。所以我需要使用NSJSONSerialization通过php url将该实体数据发送到服务器。但是在dataWithJSONObject之后,它会由于给定的错误而崩溃Ios JSON错误-JSON写入(Posm)中的类型无效,ios,json,nsjsonserialization,Ios,Json,Nsjsonserialization,我在实体类上有一个数组(使用Posm名称)。所以我需要使用NSJSONSerialization通过php url将该实体数据发送到服务器。但是在dataWithJSONObject之后,它会由于给定的错误而崩溃 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (Posm)' 这是我的代码我做了什么
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Invalid type in JSON write (Posm)'
这是我的代码我做了什么
NSMutableArray *array1=[[NSMutableArray alloc]init];
array1= [Util getPosmArrayPreference:@"NbPosm"]; //this array1 have Posm entity data, that i need to send using POST http method.
NSMutableDictionary *dictionnary = [NSMutableDictionary dictionary];
[dictionnary setObject:array1 forKey:@"First"];
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionnary
options:kNilOptions
error:&error];
NSString *urlString =@"http://..........checklist_api.php";
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:jsonData];
NSURLResponse *response = NULL;
NSError *requestError = NULL;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&requestError];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] ;
高级船员:-
#import <Foundation/Foundation.h>
@interface Posm : NSObject
@property (nonatomic, retain) NSString *posmId;
@property (nonatomic, retain) NSString *posmName;
@property (nonatomic, retain) NSString *posmQuantity;
@property (nonatomic, retain) NSString *posmRemarks;
@property (nonatomic, retain) NSString *posmAfterImageId;
@property (nonatomic, retain) NSString *posmBeforeImageId;
@property (nonatomic, retain) NSData *posmAfterData;
@property (nonatomic, retain) NSData *posmBeforeData;
@end
#导入
@接口Posm:NSObject
@属性(非原子,保留)NSString*posmId;
@属性(非原子,保留)NSString*posmName;
@属性(非原子,保留)NSString*posmQuantity;
@属性(非原子,保留)NSString*posmRemarks;
@属性(非原子,保留)NSString*POSMATERIMAGEID;
@属性(非原子,保留)NSString*posmBeforeImageId;
@属性(非原子,保留)NSData*posmAfterData;
@属性(非原子,保留)NSData*posmBeforeData;
@结束
Posm.m:-
#import "Posm.h"
@implementation Posm
@synthesize posmId, posmName, posmQuantity, posmRemarks, posmAfterData, posmBeforeData, posmAfterImageId, posmBeforeImageId;
- (id) initWithCoder: (NSCoder *)coder
{
self = [[Posm alloc] init];
if (self != nil)
{
self.posmId = [coder decodeObjectForKey:@"posmId"];
self.posmName = [coder decodeObjectForKey:@"posmName"];
self.posmQuantity = [coder decodeObjectForKey:@"posmQuantity"];
self.posmRemarks = [coder decodeObjectForKey:@"posmRemarks"];
self.posmAfterImageId = [coder decodeObjectForKey:@"posmAfterImageId"];
self.posmBeforeImageId = [coder decodeObjectForKey:@"posmBeforeImageId"];
self.posmAfterData=[coder decodeObjectForKey:@"posmAfterData"];
self.posmBeforeData=[coder decodeObjectForKey:@"posmBeforeData"];
}
return self;
}
- (void)encodeWithCoder: (NSCoder *)coder
{
[coder encodeObject:posmId forKey:@"posmId"];
[coder encodeObject:posmName forKey:@"posmName"];
[coder encodeObject:posmQuantity forKey:@"posmQuantity"];
[coder encodeObject:posmRemarks forKey:@"posmRemarks"];
[coder encodeObject:posmAfterImageId forKey:@"posmAfterImageId"];
[coder encodeObject:posmBeforeImageId forKey:@"posmBeforeImageId"];
[coder encodeObject:posmAfterData forKey:@"posmAfterData"];
[coder encodeObject:posmBeforeData forKey:@"posmBeforeData"];
}
@end
+(NSMutableArray *)getPosmArrayPreference:(NSString *)string
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *myEncodedObject1 = [defaults objectForKey:string];
NSMutableArray *arr1=[[NSMutableArray alloc]init];
NSMutableArray *arr=(NSMutableArray *) [NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject1];
for (int i=0;i<arr.count;i++) {
NSString *st=[NSString stringWithFormat:@"%d",i];
[arr1 addObject:[Util getPosmPreference:st]];
}
return arr;
}
#导入“Posm.h”
@实现Posm
@合成posmId、posmName、posmQuantity、posmRemarks、posmAfterData、posmBeforeData、posmAfterImageId、posmBeforeImageId;
-(id)initWithCoder:(NSCoder*)编码器
{
self=[[Posm alloc]init];
if(self!=nil)
{
self.posmId=[coder-decodeObjectForKey:@“posmId”];
self.posmName=[coder-decodeObjectForKey:@“posmName”];
self.posmQuantity=[coder-decodeObjectForKey:@“posmQuantity]”;
self.posmRemarks=[coder decodeObjectForKey:@“posmRemarks”];
self.posmAfterImageId=[coder decodeObjectForKey:@“posmAfterImageId]”;
self.posmBeforeImageId=[coder decodeObjectForKey:@“posmBeforeImageId]”;
self.posmAfterData=[coder decodeObjectForKey:@“posmAfterData”];
self.posmBeforeData=[coder decodeObjectForKey:@“posmBeforeData”];
}
回归自我;
}
-(void)编码器WithCoder:(NSCoder*)编码器
{
[编码器编码对象:posmId forKey:@“posmId”];
[编码器编码对象:posmName forKey:@“posmName”];
[编码器编码对象:posmQuantity forKey:@“posmQuantity”];
[编码器编码对象:posmRemarks forKey:@“posmRemarks”];
[编码器编码对象:posmAfterImageId forKey:@“posmAfterImageId”];
[编码器编码对象:posmBeforeImageId forKey:@“posmBeforeImageId”];
[编码器编码对象:posmAfterData forKey:@“posmAfterData”];
[coder encoder object:posmBeforeData forKey:@“posmBeforeData”];
}
@结束
+(NSMutableArray*)getPosmArrayPreference:(NSString*)字符串
{
NSUserDefaults*默认值=[NSUserDefaults standardUserDefaults];
NSData*myEncodedObject1=[默认objectForKey:string];
NSMutableArray*arr1=[[NSMutableArray alloc]init];
NSMutableArray*arr=(NSMutableArray*)[NSKeyedUnarchiveObjectWithData:MyEncodeObject1];
for(int i=0;i看起来您正在将POSM对象添加到数组中并尝试序列化。请将POSM对象值转换为dictionary并将dictionary添加到数组中
编辑并查找以下更新的代码
NSMutableArray *array1=[[NSMutableArray alloc]init];
array1= [Util getPosmArrayPreference:@"NbPosm"];
NSMutableArray *posmJSONArray=[NSMutableArray array];
for (Posm *posm in array1) {
NSMutableDictionary *posmJSON=[NSMutableDictionary dictionary];
[posmJSON setValue:posm.posmId forKey:@"posmId"];
[posmJSON setValue:posm.posmName forKey:@"posmName"];
[posmJSONArray addObject:posmJSON];
}
NSMutableDictionary *dictionnary = [NSMutableDictionary dictionary];
[dictionnary setObject:posmJSONArray forKey:@"First"];
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionnary
options:kNilOptions
error:&error];
NSString *urlString =@"http://ebiz.pmgasia.com.sg/iweb/Rms/Mobile/Api/checklist_api.php";
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:jsonData];
NSURLResponse *response = NULL;
NSError *requestError = NULL;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&requestError];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] ;
你能发布方法“[Util getPosmArrayPreference:(NSstring*)str]”的代码吗?谢谢你的rpy。我已经更新了我的问题。我正在获取数组1的值。你的数组包含哪种类型的对象?我正在控制台中向你展示..(lldb)po array1$0=0x1e19d540(,,)@kaar3k我已经在使用[dictionnary setObject:array1 forKey:@“First”];但键@“First”,我在应用程序中的其他任何地方都没有使用。是否正确?@kaar3我在这里使用了您的代码。但由于未捕获异常“NSInvalidArgumentException”,它在相同的位置崩溃,导致以下错误终止应用程序,原因:“JSON写入中的类型无效(nsConcreteModableData)您是否更改了以下行:NSMutableDictionary*dictionnary=[NSMutableDictionary];[dictionnary setObject:posmJSONArray forKey:@“First”];
加入聊天会话