1

我正在使用Parse.com,我有一个PFUser名为NPUser.

这是代码:

NPUser.h

#import <Foundation/Foundation.h>
#import <Parse/Parse.h>

@interface NPUser : PFUser <PFSubclassing>

@property (nonatomic) NSString *facebookId;

- (NSURL *)profileImageURL;

@end

NPUser.m

#import "NPUser.h"
#import <Parse/PFObject+Subclass.h>

@implementation NPUser

@dynamic facebookId;

+ (void)load {
    [self registerSubclass];
}

- (NSURL *)profileImageURL {
    // -- This is where things blow up -- 
    NSString *urlString = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=large", self.facebookId];
    return [NSURL URLWithString:urlString];
}

@end

当我称profileImageURL发生了一些奇怪的事情时,似乎执行只是中止了,但应用程序并没有冻结。我在第一行设置了一个断点并将其缩小到self.facebookId失败。

当我调用self.facebookIdor self[@"facebookId"]or [self objectForKey:@"facebookId"](我相信它们都是一样的)时,我得到了这个错误:

error: Execution was interrupted, reason: internal ObjC exception breakpoint(-3)..
The process has been returned to the state before expression evaluation.

我已经在 Parse 上阅读了这个关于子类化 PFUser 的问题,但我没有找到任何可以帮助我的东西。我还阅读了关于子类化 PFObject 的文档,并遵循了那里所说的内容。

问题是所有功能都可以正常工作(我的NPUser类似乎被正确调用并且它的所有属性都被正确设置)。facebookId当我检查 Parse.com 上的数据仪表板时,该属性也被正确保存。

我应该提到,当我检查被调用的用户对象时,它说它PFUser不是 a NPUser,但是profileImageURL方法(仅在 中定义NPUser)确实被调用了。

我对此感到困惑。有什么想法或提示吗?

4

1 回答 1

1

所以我睡在上面,发现了问题,这是我的一个愚蠢的疏忽。

基本上在这种情况下,我没有直接访问用户对象。相反,它是指向我拥有的另一个对象的指针关联。所以问题是我没有打电话:

[query includeKey:@"user"];

在查询其他对象时,它实际上并不包括完整的对象。这是偷偷摸摸的,因为那里有一个实际的对象,它的方法被调用,但它的动态属性没有实现(据我所知)。

希望这可以帮助其他人在未来。

于 2014-12-27T17:24:47.727 回答