Reputation: 35
I am making a turn-based game where I have stored an integer variable 'points' into NSData, which is then stored by gamecenter. So far I am doing this as follows:
NSString *newString=[[NSString alloc] initWithFormat: @"%i", points];
NSData *data = [newString dataUsingEncoding:NSUTF8StringEncoding];
I need to store more variables into NSData *data. How can i do this?
I am now aware that you can store 2 integers in the string *newString by:
NSString *newString=[[NSString alloc] initWithFormat: @"%i, %i", points, otherInteger];
However I don't know how I would decode this as the string would be stored as one integer value following on from the last. It might not be the best implementation anyway so any suggestions would be appreciated.
Upvotes: 0
Views: 199
Reputation: 289
You could do something like this:
// for encoding
int32_t points = ...;
int32_t otherInteger = ...;
NSMutableData *data = [NSMutableData data];
[data appendBytes:&points length:sizeof(int32_t)];
[data appendBytes:&otherInteger length:sizeof(int32_t)];
.
.
.
// for decoding
NSData *data = ...;
int32_t points;
int32_t otherInteger;
int index = 0;
NSRange range;
range = NSMakeRange(index, sizeof(int32_t));
[data getBytes:&points range:range];
index += sizeof(int32_t);
range = NSMakeRange(index, sizeof(int32_t));
[data getBytes:&otherInteger range:range];
index += sizeof(int32_t);
.
.
.
Upvotes: 1