0

i think this is not tought but i'm facing problem with these. i am fecthing core date and after fetching it i'm trying to save it into nsarray. but every time last data from database is saving into array. i want every data inserted into databases. suppose i have an attribute name account_name i added A,B,C,X,Y,Z. in this code i'm just getting last value Z in my array. :( but when i print it then i'm getting all data.. any solution ?

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"]);
}

4 Answers 4

2

Try this

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"]);
}
Sign up to request clarification or add additional context in comments.

Comments

0

Because, every time its get initialised . Use 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"]);

Comments

0

In your loop:

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"]);
}

you are instantiating a new array each time (and overriding the previous one). That explains what is happening.

You should instantiate the array outside of the loop, then add your objects to it within the loop.

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

}

Comments

0

Don't create duplicate values in different array.

return your fetchedObjects data as NSArray Type then retrive from 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"]);
    }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.