ios - 使用CoreData,对实体的基本类型属性赋值时出错
高洛峰
高洛峰 2017-04-18 09:53:11
0
1
376

情形如下:一个用于记录工作任务的表,每条记录是一个任务。

首先创建xcdatamodeld文件,包括:

name:【String】:任务名称
timetodo:【Double】:计划完成耗时
isValid:【Integer 16】:完成状况
enddate:【Date】:完成日期
等等,类型仅限上面四种。

从菜单生成NSManagedObject文件,属性:

@property (nullable, nonatomic, copy) NSDate *enddate;
@property (nonatomic) double timetodo;
@property (nonatomic) int16_t isvalid;
@property (nullable, nonatomic, copy) NSString *name;

等等,以及@dynamic。

实际使用中发现,在任何地方对timetodo、isvalid赋值都报错,其他属性正常,例如

theTask.timetodo = [dic[@"did"] doubleValue]; 
theTask.timetodo = 1.0;
[theTask setTimetodo:1.0];

执行到此句,都报EXC_BAD_ACCESS异常:error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=EXC_I386_GPFLT).

查了相关的问题,有说property必须是Objective C的对象类型的,基本类型的字段自动生成属性会变成NSNumber,也有说在ios新版中可以自动类型转换balabala不知所云。求解此处为何报错?如何给基本类型属性赋值?

捞捞

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

membalas semua(1)
刘奇

Cari pemahaman anda sendiri. Pautan

Data Teras menyokong banyak jenis data biasa termasuk integer, titik terapung dan jenis Boolean, tetapi editor model data menjana sifat ini sebagai NSNumber secara lalai dan dibina ke dalam subkelas objek terurus. Ini menjadikan kami sering menggunakan kaedah NSNumber seperti floatValue, boolValue, integerValue, dll. dalam kod program. Tetapi kita juga boleh menetapkan secara langsung atribut ini kepada jenis skalar yang dikehendaki, seperti int64_t, float_t atau BOOL, dengan memilih Gunakan Jenis Skalar dalam Atribut di sebelah kanan.

Ini menjana NSManagedObject (jenis data primitif menggunakan sifat skalar), yang tidak akan kelihatan seperti:

@harta benda (nonatomik, kuat) NSNumber *myInteger;

akan digantikan dengan pernyataan berikut:

@property (nonatomic) int64_t myInteger;

Nampaknya apabila menggunakan jenis data primitif, kaedah akses tidak boleh dijana secara automatik untuk skalar dan perlu ditulis secara manual, jika tidak ralat akan dilaporkan.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!