Я использую Stig Brautaset фреймворк JSON для сериализации некоторых объектов, включая NSDates (которые не поддерживаются напрямую).
Я решил использовать описание NSDate как представление JSONFragment длядата (меня не волнует незначительная потеря точности при этом).
Чтобы расширить структуру JSON Стига Браутасета , чтобы включить NSDates, я определил категорию:
@interface NSDate (NSDate_JSON) <JSONInitializer>
-(NSString *) JSONFragment;
@end
Чтобы воссоздать NSDate (и другие классы) из JSON, я определил протокол со следующим инициализатором:
@protocol JSONInitializer <NSObject>
-(id) initWithJSONRepresentation: (NSString *) aJSONRepresentation;
@end
У меня проблемы с этим инициализатором.В случае NSDate он просто вызывает initWithString:, и вот тут я попадаю в беду: он всегда возвращает nil.Это реализация:
#import "NSDate+JSON.h"
@implementation NSDate (NSDate_JSON)
-(NSString *) JSONFragment{
NSString *strRepr = [self description];
return [strRepr JSONFragment];
}
-(id) initWithJSONRepresentation:(NSString *)aJSONRepresentation{
return [self initWithString: aJSONRepresentation]; //returns nil!
}
@end
Я не уверен, что происходит.Кроме того, компилятор предупреждает меня, что initWithString: метод в initWithJSONRepresentation: не может быть найден.
Кто-нибудь знает, что может происходить?
Полный исходный код для тестового примера доступен здесь .