Skip to content

Commit d27bcfd

Browse files
Added -/+(id)unarchiveObjectOfClasses to allow for more than one class to be unarchived. This is needed if you're unarchiving any custom classes with any member classes.
1 parent fab66ac commit d27bcfd

2 files changed

Lines changed: 32 additions & 1 deletion

File tree

Lockbox.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
-(id)unarchiveObjectForKey:(NSString *)key DEPRECATED_MSG_ATTRIBUTE("Migrate to -unarchiveObjectOfClass:forKey:");;
3232
-(id)unarchiveObjectOfClass:(Class)cls forKey:(NSString *)key;
33+
-(id)unarchiveObjectOfClasses:(NSSet*)clsSet forKey:(NSString *)key;
3334

3435
-(BOOL)setString:(NSString *)value forKey:(NSString *)key DEPRECATED_MSG_ATTRIBUTE("Migrate to -archiveObject:forKey:");
3536
-(BOOL)setString:(NSString *)value forKey:(NSString *)key accessibility:(CFTypeRef)accessibility DEPRECATED_MSG_ATTRIBUTE("Migrate to -archiveObject:forKey:accesibility");
@@ -60,6 +61,7 @@
6061

6162
+(id)unarchiveObjectForKey:(NSString *)key DEPRECATED_MSG_ATTRIBUTE("Migrate to +unarchiveObjectofClass:forKey:");
6263
+(id)unarchiveObjectOfClass:(Class)cls forKey:(NSString *)key;
64+
+(id)unarchiveObjectOfClasses:(NSSet*)clsSet forKey:(NSString *)key;
6365

6466
+(BOOL)setString:(NSString *)value forKey:(NSString *)key DEPRECATED_MSG_ATTRIBUTE("Migrate to +archiveObject:forKey:");
6567
+(BOOL)setString:(NSString *)value forKey:(NSString *)key accessibility:(CFTypeRef)accessibility DEPRECATED_MSG_ATTRIBUTE("Migrate to +archiveObject:forKey:accesibility");

Lockbox.m

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ -(id)unarchiveObjectOfClass:(Class)cls forKey:(NSString *)key
220220

221221
id object = nil;
222222
@try {
223-
object = [NSKeyedUnarchiver unarchivedObjectOfClass:cls // adjust class as needed
223+
object = [NSKeyedUnarchiver unarchivedObjectOfClass:cls
224224
fromData:data
225225
error:&error];
226226
if (!object && error) {
@@ -234,6 +234,30 @@ -(id)unarchiveObjectOfClass:(Class)cls forKey:(NSString *)key
234234
return object;
235235
}
236236

237+
-(id)unarchiveObjectOfClasses:(NSSet*)clsSet forKey:(NSString *)key
238+
{
239+
NSData *data = [self dataForKey:key];
240+
NSError *error = nil;
241+
if (!data)
242+
return nil;
243+
244+
id object = nil;
245+
@try {
246+
object = [NSKeyedUnarchiver unarchivedObjectOfClasses:clsSet
247+
fromData:data
248+
error:&error];
249+
if (!object && error) {
250+
DLog(@"Failed to unarchive object for key %@: %@", key, error);
251+
}
252+
}
253+
@catch (NSException *exception) {
254+
DLog(@"failed for key %@: %@", key, exception.description);
255+
}
256+
257+
return object;
258+
}
259+
260+
237261

238262
-(BOOL)setString:(NSString *)value forKey:(NSString *)key
239263
{
@@ -370,6 +394,11 @@ +(id)unarchiveObjectOfClass:(Class)cls forKey:(NSString *)key
370394
return [_lockBox unarchiveObjectOfClass:(Class)cls forKey:key];
371395
}
372396

397+
+(id)unarchiveObjectOfClasses:(NSSet*)clsSet forKey:(NSString *)key
398+
{
399+
return [_lockBox unarchiveObjectOfClasses:clsSet forKey:key];
400+
}
401+
373402
+(BOOL)setString:(NSString *)value forKey:(NSString *)key
374403
{
375404
return [_lockBox setString:value forKey:key];

0 commit comments

Comments
 (0)