我已经制作了一个简单的应用程序来在CoreData中存储CoreLocation的位置。我的问题是,现在我想通过电子邮件发送我的所有“数据库”(CoreData)来查看和处理数据,但我不能这样做。我试图将NSManagedObjects转换为NSDictionary并枚举该字典,但它总是为空。我该怎么办?
- (NSManagedObjectContext *)managedObjectContext
{
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
context = [delegate managedObjectContext];
}
return context;
}
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"RegistoCoreData"];
self.locations = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
[self.tableView reloadData];
- (IBAction)send:(id)sender {
NSArray *keys = [[[location entity]attributesByName]allKeys];
dicionarioLocalizacoesNoCoreData = [location dictionaryWithValuesForKeys:keys];
for (NSString *valores in dicionarioLocalizacoesNoCoreData){
NSLog(@"%@, %@", valores, [dicionarioLocalizacoesNoCoreData objectForKey:valores]);
}
// Email Subject
NSString *emailTitle = @"Localizações";
// Email Content
NSString *messageBody = [NSString stringWithFormat:@"%@, %@",valores, [dicionarioLocalizacoesNoCoreData objectForKey:valores]];
// To address
NSArray *toRecipents = @[@"email@mail.com"];
MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
mc.mailComposeDelegate = self;
[mc setSubject:emailTitle];
[mc setMessageBody:messageBody isHTML:NO];
[mc setToRecipients:toRecipents];
// Present mail view controller on screen
[self presentViewController:mc animated:YES completion:NULL];
}
答案 0 :(得分:0)
由于您在评论中提到这仅供您检查数据,因此使用电子邮件是解决问题的一种不必要的复杂方法。 Xcode可以将您的任何应用程序数据下载到您的Mac。转到管理器窗口(cmd-shift-2),选择您的设备,然后选择"应用程序"设备的条目。这将列出通过Xcode安装的所有应用程序。有"下载"链接在页面底部,您可以使用它来获取您想要的任何数据。
如果你真的想使用电子邮件,那么这些代码可能会出错。您应该使用Xcode的调试器来逐步执行代码。一些可能性包括:
self.locations
,但稍后尝试发送location
。从您的问题中不清楚(如果有的话)location
获取值。在某种程度上相关的说明:在此代码的第一部分中调用performSelector
毫无意义。你可能会想到respondsToSelector
,这会有点意义。在app appnt上查找上下文并不是一个很好的设计,但是像你这样调用performSelector
对你没什么用处。