Ios 在Coredata中仅插入最后一个值

Ios 在Coredata中仅插入最后一个值,ios,core-data,Ios,Core Data,我正在尝试使用块向实体添加新值,如下所示 [context performBlockAndWait:^{ // remove all rows NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"PendingShipmentDetails"]; NSError *error;

我正在尝试使用块向实体添加新值,如下所示

[context performBlockAndWait:^{

                     // remove all rows
                     NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"PendingShipmentDetails"];
                     NSError *error;
                     NSArray * pendingShipments = [context executeFetchRequest:request error:&error];
                     for (NSManagedObject *pendingShipment in pendingShipments) {
                         [context deleteObject: pendingShipment];
                     }

                     // add new row(s)

                     NSManagedObject *pendingShipment = [NSEntityDescription insertNewObjectForEntityForName:@"PendingShipmentDetails" inManagedObjectContext:context];

                     // TODO: set values here (e.g. [pendingShipment setValue:...)
                     [pendingShipment setValue:shipmentNumber forKey:@"shipmentno"];
                     [pendingShipment setValue:proformaInvoiceNumber forKey:@"proforma_invoice_no"];
                     [pendingShipment setValue:proformaInvoiceDate forKey:@"proforma_invoice_date"];
                     [pendingShipment setValue:invoiceNo forKey:@"invoice_no"];
                     [pendingShipment setValue:invoiceDate forKey:@"invoice_date"];
                     [pendingShipment setValue:plannedShipmentDates forKey:@"planned_shipment_date"];
                     [pendingShipment setValue:address forKey:@"point_of_contact"];
                     [pendingShipment setValue:address forKey:@"empid"];
                     [pendingShipment setValue:name forKey:@"products"];
                     [pendingShipment setValue:qty forKey:@"quantity"];
                     [pendingShipment setValue:rte forKey:@"rate"];
                     [pendingShipment setValue:amt forKey:@"amount"];
                     [pendingShipment setValue:img forKey:@"product_image"];
                     [pendingShipment setValue:pendingStatus forKey:@"status"];

                     // save MOC
                     if ([context hasChanges]) {
                         (void)[context save:&error];
                     }
                 }];
首先,我尝试删除所有现有行 第二,我正在用新记录填充它

问题是,只插入最后一个值。我怎样才能纠正它

更新:

-(void)pendingShipmentDetails
{
    keyChain = [[KeyChainItemWrapper alloc] initWithIdentifier:@"LoginController" accessGroup:nil];
    NSString *username = [keyChain objectForKey:(__bridge id)(kSecAttrLabel)];

    NSString *bodyString = [NSString stringWithFormat:@"{\"method\":\"pending_shipment_details\",\"data\":{\"username\":\"%@\"}}",username];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"URL"]];
    NSData *postData = [bodyString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    [request setHTTPBody:postData];
    [request setHTTPMethod:@"POST"];
    NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError)
     {
         if ([data length] > 0 && connectionError == nil)
         {
             [self receivedPendingShipmentDetailsData:data];
             NSString* pendingResponse = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
             NSData *jsonData = [pendingResponse dataUsingEncoding:NSUTF8StringEncoding];
             NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:nil];
             NSDictionary *valueDict = [jsonDic objectForKey:@"value"];

             NSArray *details = [valueDict objectForKey:@"details"];

             NSMutableArray* arrayList = [[NSMutableArray alloc] init];

             for (NSDictionary *response in details) {
                 NSString *invoiceNo = [response valueForKey:@"invoice_no"];
                 NSString *shipmentNumber = [response valueForKey:@"shipment_no"];
                 NSString *invoiceDate = [response valueForKey:@"invoice_date"];
                 NSString *proformaInvoiceNumber = [response valueForKey:@"proforma_invoice_no"];
                 NSString *proformaInvoiceDate = [response valueForKey:@"proforma_invoice_date"];
                 NSString *plannedShipmentDates = [response valueForKey:@"planned_shipment_dates"];
                 NSString *pointOfContact =[[response objectForKey:@"point_of_contact"] valueForKey:@"empid"];
                 NSString *pendingStatus = [response valueForKey:@"status"];
                 NSDictionary *productName = [response valueForKey:@"products"];
                 NSDictionary *quantity = [response valueForKey:@"quantity"];
                 NSDictionary *rate = [response valueForKey:@"rate"];
                 NSDictionary *amount = [response valueForKey:@"amount"];
                 NSDictionary *productImages = [response valueForKey:@"product_image"];
                 NSDictionary *point_of_contact = [response valueForKey:@"point_of_contact"];

                 NSString *qty;
                 NSString *rte;
                 NSString *img;
                 NSString *address;
                 NSString *name;
                 NSString *amt;

                 for (int i = 0; i < [productName count]; i++) {
                     //  NSLog(@"product name %@",[productName valueForKey:[NSString stringWithFormat:@"%d",i ]]);
                     name = [productName valueForKey:[NSString stringWithFormat:@"%d",i ]];
                 }

                 for (int i = 0; i < [quantity count]; i++) {
                     //  NSLog(@"quantity %@",[quantity valueForKey:[NSString stringWithFormat:@"%d",i ]]);
                     qty = [quantity valueForKey:[NSString stringWithFormat:@"%d",i ]];
                 }

                 for (int i = 0; i < [rate count]; i++) {
                     //  NSLog(@"rate %@",[rate valueForKey:[NSString stringWithFormat:@"%d",i ]]);
                     rte = [rate valueForKey:[NSString stringWithFormat:@"%d",i ]];
                 }

                 for (int i = 0; i < [amount count]; i++) {
                     // NSLog(@"amount %@",[amount valueForKey:[NSString stringWithFormat:@"%d",i ]]);
                     amt = [amount valueForKey:[NSString stringWithFormat:@"%d",i ]];
                 }


                 for (int i = 0; i < [productImages count]; i++) {
                     // NSLog(@"product image %@",[productImages valueForKey:[NSString stringWithFormat:@"%d",i ]]);
                     img = [productImages valueForKey:[NSString stringWithFormat:@"%d",i ]];
                 }

                 for (int i = 0; i < [point_of_contact count]; i++) {
                     //  NSLog(@"pt of ct %@",[point_of_contact valueForKey:[NSString stringWithFormat:@"empid" ]]);
                     address = [point_of_contact valueForKey:[NSString stringWithFormat:@"empid" ]];
                 }


                 NSManagedObjectContext *context = [self managedObjectContext];

                 // remove all rows
                 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"PendingShipmentDetails"];
                 NSError *error;
                 NSArray * pendingShipments = [context executeFetchRequest:request error:&error];


                 [context performBlockAndWait:^{


                     // add new row(s)
                     NSLog(@"else block");
                     NSManagedObject *pendingShipment = [NSEntityDescription insertNewObjectForEntityForName:@"PendingShipmentDetails" inManagedObjectContext:context];
                     NSError *error;

                     for (NSManagedObject *pendingShipment in pendingShipments) {
                         [context deleteObject: pendingShipment];

                     }
                     // TODO: set values here (e.g. [pendingShipment setValue:...)
                     [pendingShipment setValue:shipmentNumber forKey:@"shipmentno"];
                     [pendingShipment setValue:proformaInvoiceNumber forKey:@"proforma_invoice_no"];
                     [pendingShipment setValue:proformaInvoiceDate forKey:@"proforma_invoice_date"];
                     [pendingShipment setValue:invoiceNo forKey:@"invoice_no"];
                     [pendingShipment setValue:invoiceDate forKey:@"invoice_date"];
                     [pendingShipment setValue:plannedShipmentDates forKey:@"planned_shipment_date"];
                     [pendingShipment setValue:address forKey:@"point_of_contact"];
                     [pendingShipment setValue:address forKey:@"empid"];
                     [pendingShipment setValue:name forKey:@"products"];
                     [pendingShipment setValue:qty forKey:@"quantity"];
                     [pendingShipment setValue:rte forKey:@"rate"];
                     [pendingShipment setValue:amt forKey:@"amount"];
                     [pendingShipment setValue:img forKey:@"product_image"];
                     [pendingShipment setValue:pendingStatus forKey:@"status"];

                     // save MOC
                     if ([context hasChanges]) {
                         (void)[context save:&error];
                     }
                 }];

             }
         }

         else if ([data length] == 0 && connectionError == nil)
         {
             [self emptyReply];
         }
         else if (connectionError != nil && connectionError.code == NSURLErrorTimedOut)
         {
             [self timedOut];
         }
         else if (connectionError != nil)
         {
             [self downloadError:connectionError];
         }
     }];

}
-(无效)待付装运详细信息
{
keyChain=[[KeyChainItemWrapper alloc]initWithIdentifier:@“LoginController”访问组:nil];
NSString*username=[keyChain objectForKey:(u桥id)(kSecAttrLabel)];
NSString*bodyString=[NSString stringWithFormat:@“{\”方法\“:\”待定的装运\详细信息\“,\”数据\“:{\”用户名\“:\”%@\”}”,用户名];
NSMutableURLRequest*request=[NSMutableUrlRequestWithURL:[NSURL URLWithString:@“URL”];
NSData*postData=[bodyString数据使用编码:NSASCIIStringEncoding allowLossyConversion:是];
[请求setHTTPBody:postData];
[请求设置HttpMethod:@“POST”];
NSString*postLength=[NSString stringWithFormat:@“%lu”,(无符号长)[postData长度]];
[请求设置值:HttpHeaderField的postLength:@“内容长度”];
NSOperationQueue*队列=[[NSOperationQueue alloc]init];
[NSURLConnection sendAsynchronousRequest:请求队列:队列完成处理程序:^(NSURResponse*response,NSData*data,NSError*connectionError)
{
if([data length]>0&&connectionError==nil)
{
[自我接收发送详细信息数据:数据];
NSString*pendingResponse=[[NSString alloc]initWithData:数据编码:NSUTF8StringEncoding];
NSData*jsonData=[pendingResponse数据使用编码:NSUTF8StringEncoding];
NSDictionary*jsonDic=[NSJSONSerialization JSONObjectWithData:jsonData选项:NSJSONReadingAllowFragments错误:nil];
NSDictionary*valueDict=[jsonDic objectForKey:@“value”];
NSArray*详细信息=[valueDict objectForKey:@“详细信息”];
NSMutableArray*arrayList=[[NSMutableArray alloc]init];
对于(NSDictionary*详细响应){
NSString*invoiceNo=[响应值forkey:@“发票号”];
NSString*shipmentNumber=[response valueForKey:@“装运号”];
NSString*invoiceDate=[响应值forkey:@“发票日期”];
NSString*形式发票编号=[响应值forkey:@“形式发票编号”];
NSString*形式发票日期=[response valueForKey:@“形式发票日期”];
NSString*plannedShipmentDates=[响应值forkey:@“计划装运日期”];
NSString*pointOfContact=[[response objectForKey:@“接触点”]valueForKey:@“empid”];
NSString*pendingStatus=[响应值forkey:@“状态”];
NSDictionary*productName=[response valueForKey:@“产品”];
NSDictionary*数量=[响应值forkey:@“数量”];
NSDictionary*rate=[响应值forkey:@“rate”];
NSDictionary*金额=[response valueForKey:@“金额”];
NSDictionary*productImages=[response valueForKey:@“product_image”];
NSDictionary*接触点=[响应值forkey:@“接触点”];
NSString*数量;
NSString*rte;
NSString*img;
NSString*地址;
NSString*名称;
NSString*金额;
对于(int i=0;i<[productName计数];i++){
//NSLog(@“product name%@,[productName valueForKey:[NSString stringWithFormat:@“%d”,i]]);
名称=[productName valueForKey:[NSString stringWithFormat:@“%d”,i]];
}
对于(int i=0;i<[数量计数];i++){
//NSLog(@“quantity%@,[quantity valueForKey:[NSString stringWithFormat:@“%d”,i]]);
数量=[quantity valueForKey:[NSString stringWithFormat:@“%d”,i]];
}
对于(int i=0;i<[速率计数];i++){
//NSLog(@“rate%@,[rate valueForKey:[nsstringwithformat:@“%d”,i]]);
rte=[rate valueForKey:[NSString stringWithFormat:@“%d”,i]];
}
对于(int i=0;i<[金额计数];i++){
//NSLog(@“amount%@,[amount valueForKey:[NSString stringWithFormat:@“%d”,i]]);
金额=[amount valueForKey:[NSString stringWithFormat:@“%d”,i]];
}
对于(int i=0;i<[productImages计数];i++){
//NSLog(@“product image%@,[productImages valueForKey:[NSString stringWithFormat:@“%d”,i]]);
img=[productImages valueForKey:[NSString stringWithFormat:@“%d”,i]];
}
对于(int i=0;i<[接触点计数];i++){
//NSLog(@“ct的pt%@,[point of_of_contact valueForKey:[NSString stringWithFormat:@“empid]”);
地址=[point of_of_contact valueForKey:[NSString stringWithFormat:@“empid”];
}
NSManagedObjectContext*上下文=[self-managedObjectContext];
//删除所有行
NSFetchRequest*request=[NSFetchRequest fetchRequestWithEntityName:@“PendingShipmentDetails”];
n错误*错误;
NSArray*pendingShipments=[context executeFetchRequest:request error:&error];
[上下文执行锁定和等待:^{
//添加新行
NSLog(@“else块”);
NSManagedObject*pendingShipment=[NSEntityDescription insertNewObjectForEntityForName:@“PendingShipmentDetails”在ManagedObjectContext:context中];
n错误*错误;
对于(NSManagedObject*待处理装运中的待处理装运){
[背景资料]
-(void) deleteStoredData
{

     NSManagedObjectContext *context = [self managedObjectContext];
 [context performBlock:^{
                 // remove all rows
                 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"PendingShipmentDetails"];
                 NSError *error;
                 NSArray * pendingShipments = [context executeFetchRequest:request error:&error];
 for (NSManagedObject *pendingShipment in pendingShipments) {
     [context deleteObject: pendingShipment];
    }
}];

[self pendingShipmentDetails];
}
-(void) pendingShipmentDetails{
// do saving using loop 
}