• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 如何从 coredata 实体中读取 NSArray

[复制链接]
菜鸟教程小白 发表于 2022-12-12 16:09:55 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试将 coredata 实体读入 NSMutableArray,但是我不断收到大量奇怪的数据。例如,当我返回一个 NSDictionary 值时,它看起来像这样

data: {
    companyName = "WPremium";
    desc = "Test";
    guid = "Otq12342";
    install =     (
        "0x1e59e910 <x-coredata://BAF7B1AD-F357-455A-B9D7-1288F7D1F652/Install/p851>",
        "0x1e59e8e0 <x-coredata://BAF7B1AD-F357-455A-B9D7-1288F7D1F652/Install/p848>",
        "0x1e59e830 <x-coredata://BAF7B1AD-F357-455A-B9D7-1288F7D1F652/Install/p837>",
        "0x1e59e930 <x-coredata://BAF7B1AD-F357-455A-B9D7-1288F7D1F652/Install/p853>",
        "0x1e59e850 <x-coredata://BAF7B1AD-F357-455A-B9D7-1288F7D1F652/Install/p839>",
        "0x1e59e890 <x-coredata://BAF7B1AD-F357-455A-B9D7-1288F7D1F652/Install/p843>",
        "0x1e59e8b0 <x-coredata://BAF7B1AD-F357-455A-B9D7-1288F7D1F652/Install/p845>",
        "0x1e59e7c0 <x-coredata://BAF7B1AD-F357-455A-B9D7-1288F7D1F652/Install/p830>",
        "0x1e5957e0 <x-coredata://BAF7B1AD-F357-455A-B9D7-1288F7D1F652/Install/p829>",
        "0x1e59e810 <x-coredata://BAF7B1AD-F357-455A-B9D7-1288F7D1F652/Install/p835>",
        "(...and 16 more...)"
    );

我想知道如何将 coredata 字典的 install 对象放入一个 NSArray 中,以便对其进行排序。

更新:这就是我调用 coredata 对象的方式。

- (NSMutableArray *)readSelectedInstallNSString *)projIDString {
    NSManagedObjectContext *context = [self managedObjectContext];
    
    
    if (context == nil) {
        NSLog(@"Nil");
    }
    else {
        
        
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName"InstallProject" inManagedObjectContext:context];
        [fetchRequest setEntity:entity];
        
        NSPredicate *predicate = [NSPredicate predicateWithFormat"projID==%@",projIDString];
        [fetchRequest setPredicate:predicate];
        
        NSError *error;
        
        NSMutableArray *installProjectDictionaryArray = [[NSMutableArray alloc] init];
        
        
        NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
        for (InstallProject *installProj in fetchedObjects) {
            
            NSMutableDictionary *tempInstallProjectDictionaryArray = [[ NSMutableDictionary alloc] init];
            
            [tempInstallProjectDictionaryArray setObject:installProj.companyName forKey"CompanyName"];
            [tempInstallProjectDictionaryArray setObject:installProj.projNo forKey"rojNo"];
            [tempInstallProjectDictionaryArray setObject:installProj.desc forKey"Desc"];
            [tempInstallProjectDictionaryArray setObject:installProj.guid forKey"GUID"];
            [tempInstallProjectDictionaryArray setObject:installProj.projID forKey"rojID"];
            [tempInstallProjectDictionaryArray setObject:installProj.install forKey"install"];
            
            [installProjectDictionaryArray addObject:tempInstallProjectDictionaryArray];
        }
        
        return installProjectDictionaryArray;
    }
    return nil;
}

然后使用返回的 NSMutableArray 我这样做

NSMutableArray *getarray = [self readSelectedInstall:projIDString];
    
    NSMutableDictionary *installsDictionary = [getarray objectAtIndex:0];
    
    NSMutableArray *tempInstalls = [installsDictionary objectForKey"install"];
    NSLog(@"%@", tempInstalls);
    
    NSArray *tempSortedItemsArray = [tempInstalls sortedArrayUsingDescriptors:
                                     @[[NSSortDescriptor
                                        sortDescriptorWithKey"dp" ascending:YES],
                                     [NSSortDescriptor
                                      sortDescriptorWithKey:@"dc

" ascending:YES]]];
    
    tempInstalls = [tempSortedItemsArray mutableCopy];
    tempSortedItemsArray = nil;
    
    

    
    NSLog(@"%@", tempInstalls);

但在最后一行代码中我有奇怪的输出。



Best Answer-推荐答案


您需要做的就是从 Core Data 中获取核心数据 NSManagedObject,install 将作为 NSSet 返回,看起来它是 NSManagedObjects 的 NSSet。

获得对象后,您可以访问“安装”属性并根据需要进行排序。

// Get the Core Data Object (Uses Magical Record)
MyObject *object = [MyObject MR_findFirstWithPredicate:[NSPredicate objectPredicate:self.users_id]];
// Sort the object set into an array
NSArray *installs = [object.install sortedArrayUsingDescriptors:@[ [NSSortDescriptor sortDescriptorWithKey:k_timestamp ascending:YES] ]];

关于ios - 如何从 coredata 实体中读取 NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19833681/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap