2012-03-21 44 views
-3

我试图获取所有从一个特定的核心数据实体的数据,每个记录放入一个字符串。但是,以下代码仅打印它访问的最后一条记录。我究竟做错了什么?撷取来自实体的所有数据,并仅打印显示的最后一条记录

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Order" inManagedObjectContext:managedObjectContext]; 

[fetchRequest setEntity:entity]; 
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 


NSLog(@"============================================="); 
NSLog(@"Generating Data To Be Sent"); 
for (NSManagedObjectContext * info in fetchedObjects) 

{ 

    NSLog(@"Client Name: %@", [info valueForKey:@"clientName"]); 
    NSLog(@"Client Account Number: %@", [info valueForKey:@"clientAccountNumber"]); 
    NSLog(@"Product Code: %@", [info valueForKey:@"productCode"]); 
    NSLog(@"Product Price: %@", [info valueForKey:@"productPrice"]); 
    NSLog(@"Product Quantity: %@", [info valueForKey:@"productQuantity"]); 
    NSLog(@"Order Total: %@", [info valueForKey:@"orderTotal"]); 
    NSLog(@"Order ID : %@", [info valueForKey:@"orderID"]); 
    NSLog(@"Transaction ID: %@", [info valueForKey:@"transactionID"]); 
    NSLog(@"Sales Rep ID : %@", [info valueForKey:@"salesRepresentativeID"]); 

} 

NSString * printedData; 
NSString * formattedData; 

NSString * clientName; 
NSString * clientAccount; 
NSString * productCode; 
NSString * productQuantity; 
NSString * productPrice; 
NSString * orderTotal; 
NSString * orderID; 
NSString * transactionID; 
NSString * salesRepID; 



for(NSManagedObject * info in fetchedObjects) 

{ 

    clientName = [info valueForKey:@"clientName"]; 
    clientAccount = [info valueForKey:@"clientAccountNumber"]; 
    productCode = [info valueForKey:@"productCode"]; 
    productPrice = [info valueForKey:@"productPrice"]; 
    productQuantity = [info valueForKey:@"productQuantity"]; 
    orderTotal = [info valueForKey:@"orderTotal"]; 
    orderID = [info valueForKey:@"orderID"]; 
    transactionID = [info valueForKey:@"transactionID"]; 
    salesRepID = [info valueForKey:@"salesRepresentativeID"]; 


    formattedData = [NSString stringWithFormat:@"|%@|%@|%@|%@|%@|%@|%@|%@|%@|\n",clientName,clientAccount,productCode,productQuantity,productPrice,orderID,transactionID,orderTotal,salesRepID]; 

    printedData = formattedData; 

} 

NSLog(@"============================================="); 
NSLog(@"Data Generated"); 
NSLog(@"%@",printedData); 
[fetchRequest release]; 

NSMutableArray *recipients = [[NSMutableArray alloc] initWithCapacity:1]; 
[recipients addObject:toEmail.text]; 

MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init]; 
controller.mailComposeDelegate = self; 
[controller setSubject:toSubject.text]; 
[controller setMessageBody:printedData isHTML:NO]; 
[controller setToRecipients:recipients]; 

[self presentModalViewController:controller animated:YES]; 
[controller release]; 
+0

行'的NSLog(@ “%@”,printedData);'应该是for循环 – Felix 2012-03-21 13:51:42

+0

确定,但那只是一个NSLog的,如果你能看到printedData变量在[控制器setMessageBody内:printedData isHTML:NO]; ,那什么给我的问题,只有1个记录被打印 – 2012-03-21 14:08:25

+0

字对字的重复[这个问题](http://stackoverflow.com/questions/9806668/printing-the-contents-of-a-fetchrequest)由同样的问题。 – FluffulousChimp 2012-03-21 15:02:45

回答

1

要解决您的初始问题,您需要使用NSMutableString。不需要formattedData变量。

... 
NSMutableString * printedData = [NSMutableString string]; 
... 

for(NSManagedObject * info in fetchedObjects) 
{ 
    ... 
    [printedData appendFormat:@"|%@|%@|%@|%@|%@|%@|%@|%@|%@|\n",clientName,clientAccount,productCode,productQuantity,productPrice,orderID,transactionID,orderTotal,salesRepID]; 
} 
... 

你的下一个问题是这个代码是多么低效。您正在循环两次相同的集合,一次记录,一次创建格式化的字符串。你可以将它组合成一个循环。而且所有的变量都是在for循环的范围之外定义的,你可以简单的声明每一行就像这样。

for(NSManagedObject * info in fetchedObjects) 
{ 
    NSString *clientName = [info valueForKey:@"clientName"]; 
    NSString *clientAccount = [info valueForKey:@"clientAccountNumber"]; 
    ... 
    //Log them all 
    NSLog(@"%@",clientName); 
    NSLog(@"%@",clientAccount); 
    ... 
} 
+0

好不容易才真正解决这个问题,我创建了一个阵列和存储所有的值,它的工作原理,但我有一些不需要的文本,准确的说,它是: 阶段:退出丝锥数:1窗口:> view:>位置在窗口:{428,471}在窗口之前的位置:{425,469}在视图位置:{149,165}先前位置鉴于:{146,163}, – 2012-03-21 14:38:46

+0

时间开始调试,这意味着您在某处打印错误的对象。 – Joe 2012-03-21 14:43:12

+0

欢呼队友欣赏指针:) – 2012-03-21 14:58:38

0

如果你想所有的formattedData字符串连接成一个单一的NSStringprintedData,这不是你的代码是干什么的,对不对?在您的托管对象的每次迭代中,您将重新分配printedData。这就是为什么你只能得到最后的纪录。

我推断你想要打印的数据来累积从你的NSManagedObject实例派生的所有formattedData字符串。如果是这样的话,那么你需要在你的管理对象,如申报printedDataNSMutableString和追加formattedData字符串是可变的字符串在每次迭代

for(NSManagedObject *info in fetchedObjects) 
{ 
    formattedData = [NSString stringWithFormat://blah blah blah 
    [printedData appendString:formattedData]; 
} 
+0

这是工作,直到它击中[排列ADDOBJECT:printedData] 错误EXC_BAD_ACCESS ...任何想法?我把这个代码放在print data =格式化的数据后面; – 2012-03-21 15:28:30

+0

如何声明'array'? – FluffulousChimp 2012-03-21 17:19:46

相关问题