Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios JSON错误-JSON写入(Posm)中的类型无效_Ios_Json_Nsjsonserialization - Fatal编程技术网

Ios JSON错误-JSON写入(Posm)中的类型无效

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)' 这是我的代码我做了什么

我在实体类上有一个数组(使用Posm名称)。所以我需要使用NSJSONSerialization通过php url将该实体数据发送到服务器。但是在dataWithJSONObject之后,它会由于给定的错误而崩溃

  *** 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”];
加入聊天会话