如何在 Parse 中存储一组自定义对象?
Posted
技术标签:
【中文标题】如何在 Parse 中存储一组自定义对象?【英文标题】:How can I store an array of custom objects in Parse? 【发布时间】:2014-07-26 21:06:41 【问题描述】:对于使用 Parse 的 ios 应用程序,我需要将一组自定义对象存储到 PFObject 中。我试过这样做,我收到错误:'NSInvalidArgumentException',原因:'JSON 写入中的无效类型(JSQMessage)'
有没有办法在 Parse 中存储一组自定义对象?我似乎找不到一个好的答案。
供您参考,我在https://github.com/jessesquires/JSQMessagesViewController使用JSQMessages 视图控制器库
我试图添加到 PFObject 的数组是用代码初始化的:
[[NSMutableArray alloc] initWithObjects:
[[JSQMessage alloc] initWithText:initialtext sender:[[PFUser currentUser] objectId] date:[NSDate date]],
nil];
【问题讨论】:
您只能添加其他 PFObjects 或基本类型 (Boolean, string..) 的数组。您不能添加任意对象的数组 @Paulw11 有没有办法将信息存储在 PFObject 中,或许可以通过将其转换为其他有效数据类型? 你读过关于对象的解析文档吗? 是的,您可以在 Parse.dashboard 中创建一个新的 PFObject 类型,并为您的每个JSQMessage
s 创建该类型的实例。然后,您可以将这些 PFObject 添加到现有 PFObject 中的数组列中。 Parse API 自动解析对象引用 - 请参阅关系数据部分 - parse.com/docs/ios_guide#objects-pointers/iOS
【参考方案1】:
如果您的自定义对象符合NSCoding
协议,那么是的,您绝对可以保存它们。
这是一个魔术:聚会系列的例子
@interface MTGSet : NSObject <NSCoding>
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *code;
@property (nonatomic, strong) NSDate *releaseDate;
@end
实施
#import "MTGSet.h"
@implementation MTGSet
- (void)encodeWithCoder:(NSCoder *)aCoder
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeObject:_code forKey:@"code"];
[aCoder encodeObject:_releaseDate forKey:@"releaseDate"];
- (id)initWithCoder:(NSCoder *)aDecoder
return [self initWithJSONDictionary:
@@"name" : [aDecoder decodeObjectForKey:@"name"],
@"code" : [aDecoder decodeObjectForKey:@"code"],
@"releaseDate" : [aDecoder decodeObjectForKey:@"releaseDate"]];
@end
用法
MTGSet *set = [MTGSet new];
set.name = @"Magic 2015";
set.code = @"M15";
set.releaseDate = [NSDate date];
NSData *dataFromSet = [NSKeyedArchiver archivedDataWithRootObject:set];
PFObject *object = [PFObject objectWithClassName:@"MyObject"];
object[@"set"] = dataFromSet;
[object save];
MTGSet *unarchivedSet = [NSKeyedUnarchiver unarchiveObjectWithData:object[@"set"]];
NSLog(@"Here's the set: %@", unarchivedSet);
有一些库可以使用我推荐的 Objective-c 运行时来简化此操作。
https://github.com/eladb/Parse-NSCoding
【讨论】:
以上是关于如何在 Parse 中存储一组自定义对象?的主要内容,如果未能解决你的问题,请参考以下文章