gpt4 book ai didi

objective-c - NSDate的initWithString : is returning nil

转载 作者:行者123 更新时间:2023-12-03 17:29:43 27 4
gpt4 key购买 nike

我正在使用Stig Brautaset的 JSON 框架序列化了一些对象,包括 NSDates(不直接支持)。

我决定使用 NSDate 的描述作为日期的 JSONFragment 表示(我不关心这样做会导致精度的微小损失)。

延长Stig Brautaset的 JSON 框架包含 NSDates,我定义了一个类别:

@interface NSDate  (NSDate_JSON) <JSONInitializer>

-(NSString *) JSONFragment;

@end

为了从 JSON 重新创建 NSDate(和其他类),我使用以下初始值设定项定义了一个协议(protocol):

@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

我不确定发生了什么事。此外,编译器警告我找不到 initWithJSONRepresentation: 中的 initWithString: 方法。

有人知道会发生什么吗?

可以获取测试用例的完整源代码 here .

最佳答案

在尝试将字符串转换为日期时,您应该始终使用NSDateFormatter,反之亦然。 -initWithString: 确实存在于 Mac 上,但不存在于 iOS 上。它要求字符串的格式极其精确。使用日期格式化程序是迄今为止最好的解决方案。

顺便说一句,如果 Apple 决定更改 -[NSDate description] 的格式,您的代码将会损坏。

关于objective-c - NSDate的initWithString : is returning nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5837777/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com