【发布时间】:2017-07-01 19:33:36
【问题描述】:
我正在使用提供this object to me 的远程库。
如果我设置调试器,我会得到以下信息:
KandyChatMessage: UUID - 70886A79-2FF60F5E1A3961EF , timestamp - 2017-02-13 17:46:12 +0000 , sender - uri - 3@domain.domain.com, userName - 3, domain - domain.domain.com, type - 0, associationType - 1 , recipient - uri - afdab3bfb5774@domain.domain.com, userName - afdab3bfb57a12b5, domain - domain.domain.com, type - 1, associationType - 1 , type: - 1 , mediaItem - KandyTextMessageData - text:3 , info:(null) , isIncoming - 1 , additionalData - (null), fromHistory - NO
通过这种方式传递:
-(void)_addEventAndRefresh:(id<KandyEventProtocol>)event{
我们的目标是将此对象转换为 JSON,如下所示:
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:event
options:0
error:&error];
但是,这会导致我的应用程序崩溃,因为我认为 event 不满足可序列化的 NSMUtableArray 或 NSDictionary 的所有规则。
这给我留下了两个选择。一,我可以找到一些巧妙的方法将任何对象转换为 JSON。或者二,我可以挑选出它的数据并从头开始编写一个 NSDictionary 对象。
有人知道如何将这种物体分开吗?
在我的debugger 中,它似乎没有响应任何内容..
> po event.UUID
=> error: property 'UUID' not found on object of type 'id'
> po event.timestamp
=> error: property 'timestamp' not found on object of type 'id'
【问题讨论】:
-
这很奇怪,因为它符合
KandyEventProtocol,它应该能够响应uuid(小写)和timestamp和eventType,根据文档。 NSLog(@"Class: %@", [event class])` 返回什么?也许[event valueForKeyPath:@"uuid"]会返回一些东西。 -
@Larme Yours 是我一直在寻找的答案。谢谢!
-
@Larme 奇怪的是
valueForKeyPath与po一起工作,但在实际应用中却不起作用。我想知道在实时和调试环境中拥有两种不相关的方法对开发人员有什么好处。 -
你能记录下事件的类别吗?另外,由于它是一个协议,我的猜测是它并不总是同一个类。你能检查一下
[event conformsToProtocol:@protocol(KandyEventProtocol)],如果不是(这很奇怪),检查它是否尊重一个(stackoverflow.com/a/4649291/1801544) -
@Larme 返回
error: cannot find protocol declaration for 'KandyEventProtocol'
标签: ios objective-c json nsjsonserialization