繁体   English   中英

获取核心数据并将其保存到nsarray

[英]fetch core data and save it to nsarray

我认为这没有考虑,但我面临着这些问题。 我正在研究核心日期,在获取它之后我正试图将其保存到nsarray中。 但每次数据库中的最后数据都保存到数组中。 我希望每个数据都插入到数据库中。 假设我有一个属性名称account_name我添加了A,B,C,X,Y,Z。 在这段代码中,我只是在我的数组中得到最后一个值Z. :(但当我打印它然后我得到所有数据..任何解决方案?

NSArray *fetchedObjects; 
AppDelegate *delegate = [UIApplication sharedApplication].delegate;
NSManagedObjectContext *context = [delegate managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Chart_of_Accounting" inManagedObjectContext:context];
[fetchRequest setEntity:entity];

NSError *error;
fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

for (NSManagedObject *obj in fetchedObjects) {
    debitArray = [NSMutableArray arrayWithObject:[obj valueForKey:@"account_name"]];
    creditArray = [NSMutableArray arrayWithObject:[obj valueForKey:@"account_name"]];
    NSLog(@"Account Name: %@", [obj valueForKey:@"account_name"]);
}

尝试这个

NSArray *fetchedObjects; 
AppDelegate *delegate = [UIApplication sharedApplication].delegate;
NSManagedObjectContext *context = [delegate managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Chart_of_Accounting" inManagedObjectContext:context];
[fetchRequest setEntity:entity];

NSError *error;
fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
NSMutableArray *debitArray = [[NSMutableArray alloc] init];
NSMutableArray *creditArray = [[NSMutableArray alloc] init];
for (NSManagedObject *obj in fetchedObjects) {
    [debitArray addObject:[obj valueForKey:@"account_name"]];
    [creditArray addObject:[obj valueForKey:@"account_name"]];
    NSLog(@"Account Name: %@", [obj valueForKey:@"account_name"]);
}

因为,每次都得到初始化。 使用addObject

debitArray = creditArray = [[NSMutableArray alloc] init];
for (NSManagedObject *obj in fetchedObjects) {
    [debitArray addObject:[obj valueForKey:@"account_name"]];
    [creditArray addObject:[obj valueForKey:@"account_name"]];

}NSLog(@"Account Name: %@", [obj valueForKey:@"account_name"]);

在你的循环中:

for (NSManagedObject *obj in fetchedObjects) {
   debitArray = [NSMutableArray arrayWithObject:[obj valueForKey:@"account_name"]];
   creditArray = [NSMutableArray arrayWithObject:[obj valueForKey:@"account_name"]];
   NSLog(@"Account Name: %@", [obj valueForKey:@"account_name"]);
}

您每次都要实例化一个新数组(并覆盖前一个数组)。 这解释了发生了什么。

您应该在循环外实例化数组,然后在循环中将对象添加到它。

debitArray = [NSMutableArray arrayWithCapacity:[fetchedObjects count]];
creditArray = [NSMutableArray arrayWithCapacity:[fetchedObjects count]];

for (NSManagedObject *obj in fetchedObjects) {

   [debitArray addObject:[obj valueForKey:@"account_name"]];
   [creditArray addObject:[obj valueForKey:@"account_name"]];
   NSLog(@"Account Name: %@", [obj valueForKey:@"account_name"]);

}

不要在不同的数组中创建重复值。

将您的fetchedObjects数据作为NSArray Type返回,然后从coredata中返回。

fetchedObjects=[self yourRetriveMethod];

    for (NSManagedObject *obj in fetchedObjects) {
        debitArray = [NSMutableArray arrayWithObject:[obj valueForKey:@"account_name"]];
        creditArray = [NSMutableArray arrayWithObject:[obj valueForKey:@"account_name"]];
        NSLog(@"Account Name: %@", [obj valueForKey:@"account_name"]);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM