forked from pmougin/F-Script
-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathFSReplacementForCoderForClass.m
72 lines (62 loc) · 1.52 KB
/
FSReplacementForCoderForClass.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/* ReplacementForCoderForClass.m Copyright (c) 1998-2009 Philippe Mougin. */
/* This software is open source. See the license. */
#import "FSReplacementForCoderForClass.h"
#import <Foundation/Foundation.h>
void __attribute__ ((constructor)) initializeFSReplacementForCoderForClass(void)
{
[NSKeyedUnarchiver setClass:[FSReplacementForCoderForClass class] forClassName:@"ReplacementForCoderForClass"];
[NSUnarchiver decodeClassName:@"ReplacementForCoderForClass" asClassName:@"FSReplacementForCoderForClass"];
}
@implementation FSReplacementForCoderForClass
- (id)awakeAfterUsingCoder:(NSCoder *)aCoder
{
id r;
[self autorelease];
r = NSClassFromString(className);
if (r == nil)
{
NSLog(@"class %@ not linked !!!",className);
return [NSNull null];
}
else return r;
}
- (void)dealloc
{
//printf("\n ReplacementForCoderForClass dealloc");
[className release];
[super dealloc];
}
- (void)encodeWithCoder:(NSCoder *)coder
{
if ([coder allowsKeyedCoding])
{
[coder encodeObject:className forKey:@"className"];
}
else
{
[coder encodeObject:className];
}
}
- (id)initWithCoder:(NSCoder *)coder
{
self = [super init];
if ([coder allowsKeyedCoding])
{
className = [[coder decodeObjectForKey:@"className"] retain];
}
else
{
className = [[coder decodeObject] retain];
}
return self;
}
- (id)initWithClass:(Class)theClass
{
if ((self = [super init]))
{
className = [NSStringFromClass(theClass) retain];
return self;
}
return nil;
}
@end