无法从 iOS 中获取核心数据获取正确的 int 值
Can't get correct int value from fetching core data in iOS
我在从core data取数据的时候发现一个奇怪的问题,我插入core data的数据是一个Event对象,title,desc和localTime
可以正确显示。
但是localUTC
,一个int类型的值,比如我在core data中插入了-2,但是取出后变成了-30。更奇怪的是,在Event class的实例中,localUTC
的值为-2,但是在UITextField
中显示时,却变成了-30
我使用的代码如下:
Event *event = [[utility getAllEvents] lastObject];
NSLog(@"%@", event); // log 1
_eventTitle.text = event.title;
_eventDesc.text = event.desc;
_eventTime.text = [NSString stringWithFormat:@"%@", event.localTime];
NSLog(@"%d", event.localUTC); // log 2
_eventUTC.text = [NSString stringWithFormat:@"%d", event.localUTC];
NSLog(@"%@", event); // log 3
NSLog(@"%d", event.localUTC); // log 4
日志:
2015-01-21 20:13:21.186 EventTest[3695:248822] <NSManagedObject: 0x7fe22a445c60> (entity: Event; id: 0xd000000000200000 <x-coredata://BC13045B-499A-4DE6-828F-3BACCFF56CF0/Event/p8> ; data: <fault>) // log 1: NSLog(@"%@", event);
2015-01-21 20:13:21.188 EventTest[3695:248822] -30 // log 2: NSLog(@"%d", event.localUTC);
2015-01-21 20:13:21.189 EventTest[3695:248822] <NSManagedObject: 0x7fe22a445c60> (entity: Event; id: 0xd000000000200000 <x-coredata://BC13045B-499A-4DE6-828F-3BACCFF56CF0/Event/p8> ; data: {
desc = "abcdefg\n\nhhhh\n\nxx\nsd\nd\nfsad\nf";
localTime = "2015-01-21 08:56:31 +0000";
localUTC = "-2";
title = "New event111";
}) // log 3: NSLog(@"%@", event); --NOTICE, the value of localUTC is "-2", but when display, it becomes -30
2015-01-21 20:13:21.189 EventTest[3695:248822] -30 // log 4: NSLog(@"%d", event.localUTC);
更新
the code Event *event = [[utility getAllEvents] lastObject];
是从 NSManagedObject 转换而来的,这是问题所在吗? [utility getAllEvents] returns NSManagedObject 的 NSArray(应该是)。我是核心数据的菜鸟,现在确定这是否会导致问题。
更新 2
使用此代码解决了该问题:
[_eventUTC setText:[NSString stringWithFormat:@"%@", [event valueForKey:@"localUTC"]]];
但是不知道为什么能解决问题,谁能指出来?
如果仔细查看 NSLog(@"%@", event);
的输出,您会发现 localUTC
是 NSString
:
localUTC = "-2";
在您的另一个日志语句中,您使用 %d
format specifier,它用于整数类型,而不是字符串。
NSLog(@"%d", event.localUTC);
将此更改为
NSLog(@"%@", event.localUTC);
或者,如果您对整数值感兴趣
NSLog(@"%d", [event.localUTC integerValue]);
尽管核心数据模型(您的 .xcdatamodeld 文件)具有 Integer 16 / 32 /64 等属性,但这些值存储在 NSNumber 对象中。因此,您需要通过 NSNumber 对象访问您的数字值。
我在从core data取数据的时候发现一个奇怪的问题,我插入core data的数据是一个Event对象,title,desc和localTime
可以正确显示。
但是localUTC
,一个int类型的值,比如我在core data中插入了-2,但是取出后变成了-30。更奇怪的是,在Event class的实例中,localUTC
的值为-2,但是在UITextField
中显示时,却变成了-30
我使用的代码如下:
Event *event = [[utility getAllEvents] lastObject];
NSLog(@"%@", event); // log 1
_eventTitle.text = event.title;
_eventDesc.text = event.desc;
_eventTime.text = [NSString stringWithFormat:@"%@", event.localTime];
NSLog(@"%d", event.localUTC); // log 2
_eventUTC.text = [NSString stringWithFormat:@"%d", event.localUTC];
NSLog(@"%@", event); // log 3
NSLog(@"%d", event.localUTC); // log 4
日志:
2015-01-21 20:13:21.186 EventTest[3695:248822] <NSManagedObject: 0x7fe22a445c60> (entity: Event; id: 0xd000000000200000 <x-coredata://BC13045B-499A-4DE6-828F-3BACCFF56CF0/Event/p8> ; data: <fault>) // log 1: NSLog(@"%@", event);
2015-01-21 20:13:21.188 EventTest[3695:248822] -30 // log 2: NSLog(@"%d", event.localUTC);
2015-01-21 20:13:21.189 EventTest[3695:248822] <NSManagedObject: 0x7fe22a445c60> (entity: Event; id: 0xd000000000200000 <x-coredata://BC13045B-499A-4DE6-828F-3BACCFF56CF0/Event/p8> ; data: {
desc = "abcdefg\n\nhhhh\n\nxx\nsd\nd\nfsad\nf";
localTime = "2015-01-21 08:56:31 +0000";
localUTC = "-2";
title = "New event111";
}) // log 3: NSLog(@"%@", event); --NOTICE, the value of localUTC is "-2", but when display, it becomes -30
2015-01-21 20:13:21.189 EventTest[3695:248822] -30 // log 4: NSLog(@"%d", event.localUTC);
更新
the code Event *event = [[utility getAllEvents] lastObject];
是从 NSManagedObject 转换而来的,这是问题所在吗? [utility getAllEvents] returns NSManagedObject 的 NSArray(应该是)。我是核心数据的菜鸟,现在确定这是否会导致问题。
更新 2 使用此代码解决了该问题:
[_eventUTC setText:[NSString stringWithFormat:@"%@", [event valueForKey:@"localUTC"]]];
但是不知道为什么能解决问题,谁能指出来?
如果仔细查看 NSLog(@"%@", event);
的输出,您会发现 localUTC
是 NSString
:
localUTC = "-2";
在您的另一个日志语句中,您使用 %d
format specifier,它用于整数类型,而不是字符串。
NSLog(@"%d", event.localUTC);
将此更改为
NSLog(@"%@", event.localUTC);
或者,如果您对整数值感兴趣
NSLog(@"%d", [event.localUTC integerValue]);
尽管核心数据模型(您的 .xcdatamodeld 文件)具有 Integer 16 / 32 /64 等属性,但这些值存储在 NSNumber 对象中。因此,您需要通过 NSNumber 对象访问您的数字值。