У меня возникли проблемы с получением чего-то для работы в объективе c. У меня есть следующий протокол:Унаследованные свойства не работают
@protocol PFItem <NSObject>
- (NSNumber *)weight;
- (NSNumber *)cost;
@end
Этот протокол реализован в следующем классе:
@interface PFItemObject : NSObject <NSCoding, PFItem> {
NSString *name;
NSNumber *weight;
NSNumber *cost;
}
@property (retain, nonatomic) NSString *name;
@property (retain, nonatomic) NSNumber *weight;
@property (retain, nonatomic) NSNumber *cost;
@property (readonly) NSString *className;
+ (id)itemWithString:(NSString *)string;
@end
Теперь, это работает хорошо для меня, за исключением того, когда я использую PFItemObject как суперкласс, как так:
@interface PFWeaponObject : PFItemObject <NSCoding, PFItem> {
NSString *damage;
NSString *critical;
NSString *range;
NSNumber *attackBonus;
NSNumber *damageBonus;
WeaponTypes type;
BOOL isTwoHanded;
}
@property (retain, nonatomic) NSString *damage;
@property (retain, nonatomic) NSString *critical;
@property (retain, nonatomic) NSString *range;
@property (retain, nonatomic) NSNumber *attackBonus;
@property (retain, nonatomic) NSNumber *damageBonus;
@property WeaponTypes type;
@property BOOL isTwoHanded;
+ (PFWeaponObject *)unarmedWeapon;
@end
+itemWithString:
метод, в PFWeaponObject
работает так:
+ (id)itemWithString:(NSString *)string {
NSArray *components = [string componentsSeparatedByString:@";"];
PFWeaponObject *weapon = [[PFWeaponObject alloc] init];
[weapon setName:[components objectAtIndex:0]];
[weapon setWeight:[NSNumber numberWithFloat:[[components objectAtIndex:1] floatValue]]];
[weapon setCost:[NSNumber numberWithInt:[[components objectAtIndex:2] intValue]]];
[weapon setDamage:[components objectAtIndex:3]];
[weapon setCritical:[components objectAtIndex:4]];
[weapon setRange:[components objectAtIndex:5]];
[weapon setType:[[components objectAtIndex:6] integerValue]];
[weapon setAttackBonus:[NSNumber numberWithInt:[[components objectAtIndex:7] intValue]]];
[weapon setDamageBonus:[NSNumber numberWithInt:[[components objectAtIndex:8] intValue]]];
[weapon setIsTwoHanded:[[components objectAtIndex:9] boolValue]];
return [weapon autorelease];
}
Я предположил, что, поскольку я унаследовал от объекта PFItemObject, я должен иметь возможность присваивать значения свойствам суперкласса без проблем. Но когда я делаю следующее:
- (void)testItemCreationStrings {
NSString *weaponString = @"+1 Greatsword;25;2500;2d6;x3;Melee;5;1;1;YES";
PFWeaponObject *sampleWeapon = [PFWeaponObject itemWithString:weaponString];
}
Все свойства от суперкласса (PFItemObject
) возвращают @"+1 Greatsword"
. Я что-то пропустил где-то, что должен был сделать?
Спасибо за любую помощь, которую вы можете предоставить, и, пожалуйста, не стесняйтесь спрашивать дополнительную информацию, если она вам нужна.
Действительно ли вы переписываете свойство имени в своем реальном коде? То есть [оружие setName: [...]] вызывается три раза подряд. –
Нет, я просто скопировал/вставил неправильно. Я исправил это в своем вопросе. –
Возможно, вы захотите опубликовать реальный код. Предположительно, несоответствие объявления метода класса и определение метода экземпляра неверны, а стоимость - «objectAtIndex: 0». –