32 -> 64 bit serializations, NSNumber, int, NSInteger
32 -> 64 bit serializations, NSNumber, int, NSInteger
- Subject: 32 -> 64 bit serializations, NSNumber, int, NSInteger
- From: Philip Dow <email@hidden>
- Date: Tue, 19 Jul 2011 13:24:08 -0500
Related to a previous posting of mine regarding floats and CGFloats when decoding older 32 bit serializations in a 64 bit runtime, I am now also in the process of modernizing some old code that used int values encapsulated by NSNumber in keyed archives.
The current serializations were performed in a 32 bit environment. I am now running in a 64 bit environment and am reading those archives. The archives contain NSNumber objects which stored int values. I would like to update the code to use NSInteger instead and the corresponding methods on the NSNumber objects.
Will I run into a similar decoding problem where the int values will not be correctly read as longs in the new environment, or is NSNumber taking care of things under the hood for me?
~Phil
On Jul 13, 2011, at 12:47 PM, Philip Dow wrote:
> Brilliant. Thank you Glenn. I compiled the app for 32 bit and it read the archive fine. I've created my own struct with floats for reading the archive in 64 bit and am coercing the data into doubles after the decoding.
>
> ~Phil
>
> On Jul 13, 2011, at 12:30 PM, glenn andreas wrote:
>
>> Are you decoding it from a 64 bit app? Because CGRect on 64 bits is made of doubles, while on 32 bits (where it was probably encoded) it was made of floats....
>>
>> Also, the exact format for @encode() varies greatly between compiler version (especially with regards for things like structure names vs ?, etc...). This, in and of itself, shouldn't make it incompatible, but a structure with two structures each with two floats doesn't match with the double-based CGRect.
>>
>> On Jul 13, 2011, at 12:20 PM, Philip Dow wrote:
>>
>>> I am trying to decode a 3rd party archive encoded in the old NSArchiver (not keyed) format. At a point in the decoding, I expect to find a CGRect, but when I call
>>>
>>> [coder decodeValueOfObjCType:@encode(CGRect) at:&myRect]
>>>
>>> an exception is raised with the error:
>>>
>>> file inconsistency: read '{?={?=ff}{?=ff}}', expecting '{CGRect={CGPoint=dd}{CGSize=dd}}'
>>>
>>> Sure enough, if I open the file in a text editor, I see {?={?=ff}{?=ff}}.
>>>
>>> According to the docs, the curly braces indicate a structure is encoded, which I would expect for CGRect, but the ? indicates an unknown type. I'm stumped for a solution and was wondering if anyone might have an insight.
>>>
>>> ~Phil_______________________________________________
>>>
>>> Cocoa-dev mailing list (email@hidden)
>>>
>>> Please do not post admin requests or moderator comments to the list.
>>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>>
>>> Help/Unsubscribe/Update your Subscription:
>>>
>>> This email sent to email@hidden
>>
>> Glenn Andreas email@hidden
>> The most merciful thing in the world ... is the inability of the human mind to correlate all its contents - HPL
>>
>
> _______________________________________________
>
> Cocoa-dev mailing list (email@hidden)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden