我有
@interface UserBaaS : BackendlessUser
@property (strong, nonatomic) NSString *username;
@end
@implementation UserBaaS
@synthesize username = _username;
- (void)setUsername:(NSString *)username {
_username = username;
[self setProperty:@"username" object:username];
}
- (NSString *)username {
_username = [self getProperty:@"username"];
return _username;
}
@end
在我的注册方法中,我在响应中获得了父类
[backendless.userService login:username password:password response:^(BackendlessUser *user) {
[[Singleton sharedInstance] hideHudImmidialty];
UserBaaS *userMy = (UserBaaS *)user;
NSLog(@"successfully logged in for = %@", userMy.username);
successBlock(userMy);
}
但是我想调用子类的方法,我知道现在调用父类的方法。我明白userMy是BackendlessUser类(不是UserBaaS)的对象,但可能有办法吗?
如何强制调用子类的方法(UserBaaS)?
答案 0 :(得分:0)
您需要实例化UserBaas
实例。
现在你有一个BackendlessUser
个实例并将它向下转换为UserBaaS
并不会有任何好处。你只是骗代编译器,但实际的运行时对象无论如何都是BackendlessUser
。
如果您无法控制响应,则可以为UserBaas
编写自己的初始值设定项(或工厂方法),并将BackendlessUser
作为参数。
答案 1 :(得分:0)
您的用户仍然是BackendlessUser。除非您发回真正的UserBaaS,否则即使您尝试投射它也无法调用子方法。
你可以做的是通过在BackendlessUser类中添加init方法,使用BackendlessUser初始化一个新的UserBaaS
-(id)initWithBackendlessUser:(BackendlessUser*)user{
self.username = user.username
}
,您的代码应如下所示:
[backendless.userService login:username password:password response:^(BackendlessUser *user) {
[[Singleton sharedInstance] hideHudImmidialty];
UserBaaS *userMy = [[UserBaaS alloc] initWithBackendlessUser:user];
NSLog(@"successfully logged in for = %@", userMy.username);
successBlock(userMy);
}