2015-01-21 99 views
0

获取核心数据得到正确的int值我发现了一个奇怪的问题,从获取核心数据数据时,数据I插入到核心数据是一个事件对象,标题,说明和localTime可以正确显示。不能从iOS设备上

然而,localUTC,int类型的值,例如,我插入到-2核心数据,但取出之际,成为-30。更离奇的是,在事件类的实例中,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); 

UPDATE

the code Event *event = [[utility getAllEvents] lastObject]; 

从NSManagedObject投,这是什么问题? [utility getAllEvents]返回NSManagedObject的NSArray(应该是)。我是Core Data的noob,现在肯定是否会导致问题。

更新2 问题是通过使用此代码固定:

[_eventUTC setText:[NSString stringWithFormat:@"%@", [event valueForKey:@"localUTC"]]]; 

,但我不知道为什么它解决了这个问题,任何人都可以指出来?

回答

1

尽管核心数据模型(你.xcdatamodeld文件)的属性,如整数16/32/64的值存储在一个NSNumber对象中。因此你需要通过NSNumber对象来访问你的数字值。

+0

感谢您的帮助!问题解决了! – Alex 2015-01-21 11:05:17

0

如果您在NSLog(@"%@", event);输出仔细看,你会看到localUTCNSString

localUTC = “-2”;

在您的另一个日志语句中,您使用%dformat specifier,它用于整数类型而不是字符串。

NSLog(@"%d", event.localUTC); 

更改为

NSLog(@"%@", event.localUTC); 

,或者,如果你有兴趣的整数值

NSLog(@"%d", [event.localUTC integerValue]); 
+0

说到localUTC的,设置该属性时,我用这个方法:[newEvent的setValue:[NSNumber的numberWithInt:event.localUTC] forKey:@ “localUTC”];这种方法不正确? – Alex 2015-01-21 10:05:59

+0

而另一个问题是,在对象的日志,“LOCALTIME =‘2015年1月21日8点56分31秒0000’;”这是否意味着localTime被存储为字符串值而不是NSDate? – Alex 2015-01-21 10:12:40

+0

我不确定,它也可能是'NSDate',但它刚刚放在引号之间。您可以在'Event.h'文件或'.xcdatamodel'文件中检查任何属性的类型。 – 2015-01-21 10:23:50