【问题标题】:Core Data and a UIActivityViewController核心数据和 UIActivityViewController
【发布时间】: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];
}

编辑

我完全把事情复杂化了。我只是在这里删除了\nNSString *names = [itemNames componentsJoinedByString:@""];,这让它们在每个项目之后都下降到新的一行。

【问题讨论】:

    标签: objective-c core-data nsmutablearray nsarray uiactivityviewcontroller


    【解决方案1】:
    - (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:@" \n"];
    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];
    }
    

    编辑

    我完全把事情复杂化了。我只是在这里删除了一个\nNSString *names = [itemNames componentsJoinedByString:@""];,这让它们在每个项目之后都下降到一个新行。

    【讨论】:

      猜你喜欢
      • 2011-01-11
      • 2010-12-04
      • 2014-09-18
      • 2013-01-24
      • 2011-12-04
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多