ios-CoreData 对象充填NSSet

问题描述

CoreData 对象充填NSSet

有一个CoreData中的一对多关系。现在想从coredata实体中创建一个对象,然后设置为NSSet。

我想实例化对象没有错,但是再设置NSSet时就不对。

AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];

NSSet *selectedCategories = [NSSet set];

for (NSString *categoryName in self.categories /*NSMutableArray propterty*/) {
    Category *category = [NSEntityDescription
    insertNewObjectForEntityForName:@"Category" inManagedObjectContext:context];
    category.name = categoryName;
    [selectedCategories setByAddingObject:category];
}

[self.delegate addCategoryViewControllerDidSelectCategory:
                                 self didSelectCategories:selectedCategories];

解决方案

这行:

[selectedCategories setByAddingObject:category];

创建了一个没有指定变量的新设置,试试用NSMutableSet

NSMutableSet *selectedCategories = [NSMutableSet set];

for (NSString *categoryName in self.categories /*NSMutableArray propterty*/) {
    Category *category = [NSEntityDescription
    insertNewObjectForEntityForName:@"Category" inManagedObjectContext:context];
    category.name = categoryName;
    [selectedCategories addObject:category];
}

解决方案二:

NSSet *selectedCategories = [NSSet set];  //返回的试一个不可变的Set selectedCategories
[selectedCategories addObject:category]; //基于selectedCategories内容添加category,返回新的se包含category,selectedCategories是不可变的,debug很容易看到

应该使用NSMutableSet 这样可以灵活添加删除Set里的元素, 像NSArray一样 要能改变array内容,应该使用NSMutableArray。
时间: 2024-09-29 06:26:20

ios-CoreData 对象充填NSSet的相关文章

iOS CoreData 增删改查详解_IOS

最近在学习CoreData, 因为项目开发中需要,特意学习和整理了一下,整理出来方便以后使用和同行借鉴.目前开发使用的Swift语言开发的项目.所以整理出来的是Swift版本,OC我就放弃了. 虽然Swift3 已经有了,目前整理的这个版本是Swift2 的.Swift 3 的话有些新特性. 需要另外调整,后续有时间再整理.  继承CoreData有两种方式:  创建项目时集成   这种方式是自动继承在AppDelegate里面,调用的使用需要通过UIApplication的方式来获取AppDe

ios oc对象不可以直接写到plist中..

问题描述 ios oc对象不可以直接写到plist中.. ios oc对象不可以直接写到plist中..ios oc对象不可以直接写到plist中..ios oc对象不可以直接写到plist中.. 解决方案 你可以写到 NSUserDefault 中, 也就是常说的 User setting, 可以把它当 NSDictionary 来用. 解决方案二: 必须是nsstring,array,dictionary,set等的子类 解决方案三: plist里面一般都是字典数组字符串之类的,你要存对象得

ios coredata数据操作-iOS coredata数据操作

问题描述 iOS coredata数据操作 各位大大求指导:用coredata做个新闻类的APP,每次从服务器上请求的数据和本地coredata里面的数据进行对比(有一个专门id来区别每条信息),如果有相同的id就不对本地数据进行更新,如果本地coredata的数据库里面没有从网上请求最新的id,删除本地数据,插入新id的数据. 最终结果就是本地数据库信息条数不会变化,求指导

iOS - CoreData 数据库存储

1.CoreData 数据库 CoreData 是 iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据.使用 CoreData 框架,程序员可以很轻松有效地通过面向对象的接口管理数据.CoreData 框架提供了 对象 - 关系映射 (ORM) 的功能,即能够将 OC 对象转化成数据,保存在 SQLite3 数据库文件中,也能够将保存在数据库中的数据还原成 OC 对象,在数据操作过程中,无需编写任何 SQL 语句. 模型文件及实体(Entity).要使用 CodeDa

iOS 混合应用的关键点分析 - 仿 Android 平台 WebView 可注入本地对象方法的功能实现要点

iOS 混合应用的关键点分析 - 仿 Android 平台 WebView 可注入本地对象方法的功能实现要点 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 对于 iOS 和 Android 平

iOS对象指针和基础数据类型的强转详解_IOS

本文主要介绍了iOS中对象指针和基础数据类型如何进行强转,下面话不多说,直接来看示例详解. 一.对象指针的强转: UIView *view = [UIView new];//new一个UIView类的对象 UILabel *label = (UILabel *)view;//强转成UILabel指针 label.text = @"123";//给label的text属性赋值(调用label的setText方法) 上述代码会产生崩溃,崩溃信息如下: -[UIView setText:]:

iOS 对象属性详细介绍_IOS

iOS 对象属性 oc对象的一些属性: retain,strong, copy,weak,assign,readonly, readwrite, unsafe_unretained 下面来分别讲讲各自的作用和区别: retain,计数器加1, (增加一个指向内存的指针) 对应release(计数器-1) setter 方法对参数进行 release 旧值再 retain 新值,所有实现都是这个顺序 - (void)setBackView:(UIView *)backView { if (_bac

iOS - OC NSSet 集合

前言 NSSet:集合 @interface NSSet<__covariant ObjectType> : NSObject <NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration> @interface NSMutableSet<ObjectType> : NSSet<ObjectType> NSSet 集合跟数组差不多,但 Set 集合不能存放相同的对象,它是一组单值对象的集合,被

CoreData的增删改查概述

近几天一直在使用 CoreData, 以前觉得它是一门高深的技术, 等自己用了之后才觉得,它是那么的平易近人. 一: 首先我们要在创建应用程序的时候勾选 UseCoreData 选项, 当然也可以自己后期创建. 系统会生成如下AppDelegate.h的文件 #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic