0

这是我第一次尝试将 Simperium 集成到我的一个 iOS 核心数据项目中。虽然初始同步效果很好。我在后面的阶段看到了大量的崩溃,下面的日志。

2013-03-26 18:40:08.460 APP[2468:ae03] * ** -[SPMemberDate diff:otherValue:] 中的断言失败,/path/to/simperium-ios-develop/Simperium/SPMemberDate.m:48

2013-03-26 18:40:08.465 APP[2468:ae03] * **由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“Simperium 错误:无法区分日期,因为它们的类不是 NSDate”

在占据 SPMemberDate.m 的第 48 行的方法中打印[thisValue class]&的结果[otherValue class]表明,在某一时刻,thisValue 是一个__NSDate对象,而 otherValue 是一个__NSCFNumber对象。

罪魁祸首对象的值始终如下:-

1970-01-01 00:00:00 +0000为了thisValue

0为了otherValue

我不知道下一步该去哪里尝试和调试这个问题。什么会返回 NSNumber 而不是 NSDate?而且,什么可以返回 70 年代的日期?我相当确定,这在我的代码中什么都没有。你能帮忙的话,我会很高兴。

4

2 回答 2

0

您是仅在 iOS 设备之间同步,还是同时与 Web 应用程序或后端服务同步?日期值当前以数字形式传输(自 1970 年以来的秒数),因此如果您从非 iOS 设备向 Simperium 发送日期,则需要使用该格式。

Simperium iOS 库应该在 iOS 上处理与 NSDate 的转换。它是开源的,因此您可以尝试下载它并进一步挖掘以查看可能出现的问题: https ://github.com/Simperium/simperium-ios

于 2013-03-29T18:53:45.277 回答
0

你得到的数字是自 1970 年以来的时间间隔,

您可以通过以下方式将其转换为日期:

// The time interval 
NSTimeInterval theTimeInterval = ...;
// Get the system calendar
NSCalendar *sysCalendar = [NSCalendar currentCalendar];

// Create the NSDates
NSDate *date1 = [[NSDate alloc] init];
NSDate *date2 = [[NSDate alloc] initWithTimeInterval:theTimeInterval sinceDate:date1]; 
于 2013-03-26T14:25:59.477 回答