PFQuery of a registered subclass causing an NSInternalInconsistencyException
到目前为止,我在 Parse 上度过了一段愉快的时光。我目前在下面有一段代码。
1 2 3 4 5 6 7 8 | // Retrieve all ride requests PFQuery *query = [RideRequest query]; [query includeKey:@"customer"]; [query whereKey:@"status" equalTo:@(RIDE_REQUESTED)]; [query orderByDescending:@"numberOfPeople"]; [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { rides = objects; }]; |
由于我收到以下错误,因此从未输入过上面的块
由于未捕获的异常 \\'NSInternalInconsistencyException\\' 而终止应用程序,原因:\\'Key "numberOfPeople" 没有数据。在获取其值之前调用 fetchIfNeeded。\\'
RideRequest 是一个注册的子类。类接口就是您在下面看到的基本形式。
1 2 3 4 5 6 | @class User @interface RideRequest : PFObject<PFSubclassing> @property (nonatomic, strong) User *customer; @property (nonatomic) int status; @property (nonatomic, strong) NSString *numberOfPeople; |
User 是 PFUser 的注册子类。
1 2 3 4 | @class RideRequest @interface User : PFUser<PFSubclassing> @property (nonatomic, strong) RideRequest *rideRequest; |
我有其他子类 pfobjects,它们在执行 PFQuery 时没有任何问题,但是它们都没有对 User(PFUser 的子类)的引用。我假设这可能与我看到此问题的原因有关。我不确定为什么需要提取密钥"numberOfPeople"。它不是指向 PFObject 的指针。所以有点混乱。任何帮助将不胜感激。
解决了我自己的问题。我在我的自定义 PFObject 子类上覆盖了 init 方法。从我的实现中删除 -(instancetype)init 方法并添加我自己的自定义初始化程序有助于解决问题。事实证明,PFQuery 在为它返回的 NSArray 生成对象时在其实现中调用了 init 方法(或者至少这是它看起来正在做的事情)。
另外作为说明,我注意到从模拟器进行调试比从我的设备调试提供了更详细的堆栈跟踪。不确定这是否与解析相关。