2014-12-26 1 views
1

Я использую Parse.com, и у меня есть PFUser подкласс NPUser.Ошибка при попытке доступа к динамическому свойству подкласса PFUser

Вот код:

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.facebookId или self[@"facebookId"] или [self objectForKey:@"facebookId"] (который я считаю, все то же самое), я получаю эту ошибку:

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

Я прочитал this question on Parse about subclassing PFUser, но я не нашел ничего, что там может Помоги мне. Я также читал docs on subclassing PFObject и следил за всем, что там было сказано.

Все дело в том, что все функции работают иначе (мой класс NPUser, кажется, правильно вызван и все его свойства правильно установлены). Свойство facebookId также сохраняется правильно, когда я проверяю панель данных данных на Parse.com.

Следует отметить, что, когда я проверить называемый пользовательский объект он говорит, что это PFUser не NPUser но метод profileImageURL (который определен только в NPUser) не дозвонились.

Я озадачен этим. Любые мысли или советы?

ответ

1

Так что я спал на нем и нашел проблему, это была глупая надзору с моей стороны.

В принципе, в этом случае я не обращался непосредственно к объекту пользователя. Вместо этого это была ассоциация указателей с другим объектом, который у меня был. Поэтому проблема заключалась в том, что я не звонил:

[query includeKey:@"user"]; 

при запросе этого другого объекта, поэтому он фактически не включал полный объект. Это было непроницаемо, потому что там был реальный объект, и его методы вызывались, но его динамические свойства не были реализованы (из того, что я мог сказать).

Надеюсь, это поможет кому-то еще в будущем.

+0

Определенно помог мне. в моем случае, он просто прекратил работу из ниоткуда через несколько дней dev/testing. Мне пришлось включить ключ из массива объектов 'query.includeKey (" listOfThings.object ")'. У меня были все виды сумасшедших/страшных вещей, подобных этому, с SDK Parse. – jday