通过电子邮件发送coreData

时间:2014-07-17 22:20:12

标签: core-data core-data-migration

我已经制作了一个简单的应用程序来在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];

}

1 个答案:

答案 0 :(得分:0)

由于您在评论中提到这仅供您检查数据,因此使用电子邮件是解决问题的一种不必要的复杂方法。 Xcode可以将您的任何应用程序数据下载到您的Mac。转到管理器窗口(cmd-shift-2),选择您的设备,然后选择"应用程序"设备的条目。这将列出通过Xcode安装的所有应用程序。有"下载"链接在页面底部,您可以使用它来获取您想要的任何数据。

如果你真的想使用电子邮件,那么这些代码可能会出错。您应该使用Xcode的调试器来逐步执行代码。一些可能性包括:

  • 获取请求不会返回任何值
  • 您将获取结果分配给self.locations,但稍后尝试发送location。从您的问题中不清楚(如果有的话)location获取值。
  • 不清楚获取代码的来源 - 您不会在方法中显示它。当您尝试发送数据时,可能还没有发生提取?

在某种程度上相关的说明:在此代码的第一部分中调用performSelector毫无意义。你可能会想到respondsToSelector,这会有点意义。在app appnt上查找上下文并不是一个很好的设计,但是像你这样调用performSelector对你没什么用处。