gpt4 book ai didi

ios - 只有最后一个值被插入到 Coredata 中

转载 作者:行者123 更新时间:2023-11-28 21:30:44 26 4
gpt4 key购买 nike

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

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

}

最佳答案

如果您打算在每次新提取数据时删除之前提取的所有对象。然后,您应该首先通过为该实体调用 NSFetchRequest 来删除所有持久对象,然后像您一样使用 for-in 循环添加值。

您也可以使用 NSBatchDeleteRequest

//一些方法或IBAction 来刷新数据//首先删除所有旧的。

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

现在您的 pendingShipmentDetails 将相同,尽管删除了对象。

-(void) pendingShipmentDetails{
// do saving using loop
}

关于ios - 只有最后一个值被插入到 Coredata 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36177595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com