【发布时间】:2015-06-13 19:15:04
【问题描述】:
我的应用程序正在使用核心数据来持久化数据。我的主 VC 上有一个 UIActivityViewController 设置。一切都按我的预期工作。
我的问题是,当您从核心数据模型中获取项目时,您如何让它返回模型中的每个项目?
我应该使用谓词对项目进行排序吗?
编辑
这是我的 UIActivityViewController 设置。我知道一些 UIActivityViewController 动作没有出现在 sim 中,这很好。我正在使用确实出现的电子邮件操作。我看到我的 NSString 和 NSURL 显示没有问题,但我的 itemnames NSArray 没有显示。它应该出现在 sim 卡中吗?
- (IBAction)ShareItem:(id)sender {
NSString *textToShare = @"This is just some random text I put here";
NSURL *myWebsite = [NSURL URLWithString:@"http://www.martylavender.com/"];
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Item"];
fetchRequest.resultType = NSDictionaryResultType;
NSError *error = nil;
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSMutableArray *itemNames = [results valueForKey:@"itemname"];
NSArray *objectsToShare = @[textToShare, myWebsite, itemNames];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];
NSArray *excludeActivities = @[UIActivityTypeAirDrop,
UIActivityTypePrint,
UIActivityTypePostToTwitter,
UIActivityTypeAssignToContact,
UIActivityTypeSaveToCameraRoll,
UIActivityTypeAddToReadingList,
UIActivityTypePostToFlickr,
UIActivityTypePostToVimeo];
activityVC.excludedActivityTypes = excludeActivities;
[self presentViewController:activityVC animated:YES completion:nil];
NSLog(@"%@", itemNames);
}
我确实看到我的项目在控制台中打印出来了。也许他们只是不会显示在 sim 中?
编辑
我想我可能知道它为什么不显示。 UIActivityTypeMail 说它支持:字符串、属性字符串和 url。不支持数据、图像、资产。
编辑
好的,想通了。我需要把我的 NSMutableArray 转换成一个 NSString。 NSString 有一个方法可以将你的数组放入字符串中。它也有逆向,它将把你的字符串粘到一个数组中。话虽如此。
这是更新的代码。我只需要弄清楚将文本放入电子邮件后如何格式化它,这将是金色的。
- (IBAction)ShareItem:(id)sender {
NSString *textToShare = @"This is just some random text I put here";
NSURL *myWebsite = [NSURL URLWithString:@"http://www.martylavender.com/"];
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Item"];
fetchRequest.resultType = NSDictionaryResultType;
NSError *error = nil;
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSMutableArray *itemNames = [results valueForKey:@"itemname"];
NSString *names = [itemNames componentsJoinedByString:@""];
NSLog(@"%@",names);
NSArray *objectsToShare = @[textToShare, myWebsite, names];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];
NSArray *excludeActivities = @[UIActivityTypeAirDrop,
UIActivityTypePrint,
UIActivityTypePostToTwitter,
UIActivityTypeAssignToContact,
UIActivityTypeSaveToCameraRoll,
UIActivityTypeAddToReadingList,
UIActivityTypePostToFlickr,
UIActivityTypePostToVimeo];
activityVC.excludedActivityTypes = excludeActivities;
[self presentViewController:activityVC animated:YES completion:nil];
}
编辑
我完全把事情复杂化了。我只是在这里删除了\n:NSString *names = [itemNames componentsJoinedByString:@""];,这让它们在每个项目之后都下降到新的一行。
【问题讨论】:
标签: objective-c core-data nsmutablearray nsarray uiactivityviewcontroller