簡體   English   中英

JSON錯誤-JSON寫入(Posm)中的類型無效

[英]JSON Error - 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] ;

Posm.h類:-

#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.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;
}

我創建JSON對象錯了嗎? 請建議我如何使實體類(Posm)JSON序列化兼容?

謝謝。

好像您正在將POSM對象添加到數組中並嘗試進行序列化。將您的POSM對象值轉換為字典並將字典添加到數組中。

編輯找到下面的更新代碼

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] ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM