Search code examples
ioscore-datasimperium

Simperium error: couldn't diff dates because their classes weren't NSDate


This is my first time trying to integrate Simperium in one of my iOS core data projects. Though the initial sync works great. I'm seeing a ton of crashes at later stages with the following log.

2013-03-26 18:40:08.460 APP[2468:ae03] *** Assertion failure in -[SPMemberDate diff:otherValue:], /path/to/simperium-ios-develop/Simperium/SPMemberDate.m:48

2013-03-26 18:40:08.465 APP[2468:ae03] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Simperium error: couldn't diff dates because their classes weren't NSDate'

Printing the results of [thisValue class] & [otherValue class] in the method that occupies line 48 of SPMemberDate.m shows that at one point, thisValue is an __NSDate object, while otherValue is __NSCFNumber object.

The values of the culprit objects are always the following :-

1970-01-01 00:00:00 +0000 for thisValue

and

0 for otherValue

I'm at loss for where to look next to try & debug this issue. What could be returning an NSNumber instead of an NSDate? And, what could be returning a date from the 70s? I'm fairly ceratin, it's nothing in my code. Any help would be nice.


Solution

  • Are you only syncing between iOS devices, or are you also syncing to a web app or backend service? Date values are currently transmitted as numbers on the wire (number of seconds since 1970), so if you're sending dates to Simperium from a non-iOS device, you'll need to use that format.

    The Simperium iOS library should be handling conversion to/from NSDate on iOS though. It's open source, so you can try downloading it and digging in a bit further to see what might be going wrong: https://github.com/Simperium/simperium-ios