ios CoreData 用父类的实例对象person接收存有子类的数组,打印person.class ,结果是子类类名?还是父类类名(已解决)

新建Person类

person的子类 Student

Teacher

今天做数据库封装时想到的,因为查询出的结果都继承自NSManagerObject,但是他的子类属性又不一定一样,所以我就想我在在查询之后能不能判断他是那个子类并且按照子类的属性进行赋值,所以首先我要数组存的对象的类进行判断

测试如下:(把主要代码贡献如下,其他文件自己建议下吧,很简单)

NSMutableArray * array = [NSMutableArray
array];

NSMutableArray * array2 = [NSMutableArray
array];

for (int i =
0; i< 5; i++) {

Student * stu1 = [[Student
alloc]init];

stu1.name =[NSString
stringWithFormat:@"jack%i",i];

[array
addObject:stu1];

Teacher * teacher = [[Teacher
alloc]init];

teacher.name = [NSString
stringWithFormat:@"limei%i",i];

[array2
addObject:teacher];

}

for (Person * p
in array) {

NSLog(@"%@------",p.class);

}

for (Person * p
in array2) {

NSLog(@"%@------",p.class);

}

//
从打印结果可以看出虽然我用他的父类接收,.class后仍能显示子类名称,这样从数组中遍历的对象我可以用.class获取他是哪个子类,并判断如何给他赋值

//    例如

for (Person * p
in array2) {

if (p.class == [Student
class]) {

NSLog(@"是学生");

}else {

NSLog(@"不是学生");

}

}

if ([array[0]
class] == [Student
class]) {

NSLog(@"是学生");

}else{

NSLog(@"不是学生,是%@",[array[0]
class]);

}

ios CoreData 用父类的实例对象person接收存有子类的数组,打印person.class ,结果是子类类名?还是父类类名(已解决)ios CoreData 用父类的实例对象person接收存有子类的数组,打印person.class ,结果是子类类名?还是父类类名(已解决)ios CoreData
用父类的实例对象person接收存有子类的数组,打印person.class ,结果是子类类名?还是父类类名(已解决)ios CoreData 用父类的实例对象person接收存有子类的数组,打印person.class ,结果是子类类名?还是父类类名(已解决)

时间: 2024-11-04 22:59:59

ios CoreData 用父类的实例对象person接收存有子类的数组,打印person.class ,结果是子类类名?还是父类类名(已解决)的相关文章

ios开发-凤凰网的揭层式下拉刷,如何下拉table显示其下面的视图不是背景(已解决)

思路: 1.通过在ScrollDidScroll代理方法中监听contentoffset属性的y值,判断是下拉还是上拉 2.需要的第三方框架SDProgress,实现下拉圆饼填充 3.当圆饼填满即其属性progress=1时,sdorgress隐藏(需要改原码(原码是从父视图移除,由于移除后不好操作,遂先隐藏掉)),并将table的frame,orgine.y值设置为一定高度,为松手后table与控制器顶部保持一定距离以显示动画 4.当圆饼消失时,创建一个UIImageView,并开始动画 5.

面向对象之父类变量指向子类实例对象分析

父类 public class person { public static string markup; static person() { markup = "markup"; } //无参数构造函数 //public person() //{ // Console.WriteLine("调用person构造函数"); //} public person(int parage, string paraname, string parahobby) { age =

面试题: TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!

 问题:TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常! 我个人测试的结果是:当前的add方法 先 放入父类的对象,就会报错.    如果 先 放入子类的对象,则各自调用各自的compareTo()方法进行排序. 至于底层为什么,我暂时还没有弄清楚.......哪位大佬可以私聊我. 看代码: package 测试比较父类子类conpateTo; public class Parent

TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!

/** * * @author ocq */ class Parent implements Comparable { private int age = 0; public Parent(int age) { this.age = age; } public int compareTo(Object o) { System.out.println("method of 父类"); Parent o1 = (Parent) o; return age > o1.age ? 1 :

IOS开发系列--Objective-C之类和对象

概述 前面已经简单介绍过ObjC的基础知识,让大家对ObjC有个大致的印象,今天将重点解释ObjC面向对象的特性.ObjC相对于C语言多了面向对象特性,但是ObjC又没有其他面向对象语言那么多语法特性,ObjC本身对面向对象进行了精简.当然这并不代表今天的内容就会少,今天的内容还是相当多的: 类定义 成员变量 方法和属性 self关键字 构造方法 description方法 继承 类定义 在C#.Java等其他高级语言中定义一个类是相当简单点的,直接一个关键字class加一对大括号基本就完成了,

python—类对象和实例对象的区别

最近在对RF的通讯层的模块进行封装,需要将之前放在类似main里面的一个方法,如下所示:这段代码是开发提供,用于接口测试,模拟底层通讯,具体的通讯是在dll内,python这边只是做了个封装让RF进行调用.这段通讯层的代码实质上做了五件事: 第一:加载dll: 第二:初始化dll内的通讯参数: 第三:与服务器进行连接,创建session 第四:把数据senbuffer通过sessionManger发送给服务器 第五:取得的数据返回recibuffer def testlogin(ip,port,

ios CoreData框架的使用,对上下文数据的增删改查,表与表之间的关联,1对多,1对1,谓词查询,多表连接

这里是只是代码,因为博客插入图片效果不是很好,我自己写的总结比较详细,有兴趣的朋友可以在评论里留下邮箱,我收到后会发给大家. 转载注明出处,重视原创者的劳动成果,谢谢! - (void)viewDidLoad { [super viewDidLoad]; [self _creatTable];//插入数据 //    [self _query];// 查询数据 // KVC很霸道,即使readonly通过kvc也可赋值,kvo精华 //    Book * book = [[Book alloc

[Swift通天遁地]四、网络和线程-(11)将服务器返回的JSON映射为实例对象

本文将演示使用第三方类库中,将服务器返回的JSON映射为实例对象. 首先确保在项目中已经安装了所需的第三方库. 点击[Podfile],查看安装配置文件. 1 platform :ios, ’12.0’ 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'Alamofire', '~> 4.0' 7 pod 'AlamofireObjectMapper

Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别(转)

一.Java的反射机制   每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图:  其中 i.加载是指将编译后的java类文件(也就是.class文件)中的二进制数据读入内存,并将其放在运行时数据区的方法区内,然后再堆区创建一个Java.lang.Class对象,用来封装类在方法区的数据结构.即加载后最终得到的是Class对象,并且更加值得注意的是:该Java.lang.Class对象是单实例的,无论这个类创建了多少个对象,他的Class对象时唯一的!!!!.