I\'m trying to fetch all of the data from a particular Core Data Entity and place each record into a string. However the following code only prints the LAST record that it acce
If you are trying to concatenate all of the formattedData
strings into a single NSString
printedData
, that's not what your code is doing, right? In each iteration over your managed objects, you are re-assigning printedData
. That's why you only get the last record.
I'm inferring that you want printed data to accumulate all of the formattedData
strings derived from your NSManagedObject
instances. If that's the case, then you need to declare printedData
as an NSMutableString
and append formattedData
strings to that mutable string in each iteration over your managed objects, e.g.
for( NSManagedObject *info in fetchedObjects )
{
formattedData = [NSString stringWithFormat://blah blah blah
[printedData appendString:formattedData];
}
To fix your initial problem you need to use an NSMutableString
. There is no need for formattedData
variable.
...
NSMutableString * printedData = [NSMutableString string];
...
for(NSManagedObject * info in fetchedObjects)
{
...
[printedData appendFormat:@"|%@|%@|%@|%@|%@|%@|%@|%@|%@|\n",clientName,clientAccount,productCode,productQuantity,productPrice,orderID,transactionID,orderTotal,salesRepID];
}
...
Your next issue is how inefficient this code is. You are looping over the same collection twice, once to log, once to create a formatted string. You can combine this into one loop. Also all of the variables are defined outside of the scope of the for loop that they are used in, you could simply just declare each one on a line like this.
for(NSManagedObject * info in fetchedObjects)
{
NSString *clientName = [info valueForKey:@"clientName"];
NSString *clientAccount = [info valueForKey:@"clientAccountNumber"];
...
//Log them all
NSLog(@"%@",clientName);
NSLog(@"%@",clientAccount);
...
}