Ich habe Probleme, etwas in Ziel c zu bekommen. Ich habe folgendes Protokoll:Vererbte Eigenschaften funktionieren nicht
@protocol PFItem <NSObject>
- (NSNumber *)weight;
- (NSNumber *)cost;
@end
Dieses Protokoll in der folgenden Klasse implementiert:
@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
Nun, dies funktioniert gut für mich, außer wenn ich die PFItemObject als übergeordnete Klasse verwenden wie so:
@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
Die +itemWithString:
Methode, in den PFWeaponObject
funktioniert wie folgt:
+ (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];
}
Ich nahm an, dass ich, weil ich vom PFItemObject geerbt habe, in der Lage sein sollte, Eigenschaften der Oberklasse ohne Probleme zuzuordnen. Aber wenn ich den folgenden Code:
- (void)testItemCreationStrings {
NSString *weaponString = @"+1 Greatsword;25;2500;2d6;x3;Melee;5;1;1;YES";
PFWeaponObject *sampleWeapon = [PFWeaponObject itemWithString:weaponString];
}
Alle Objekte aus der übergeordneten Klasse (PFItemObject
) alle zurückkehren @"+1 Greatsword"
. Habe ich irgendwo etwas vermisst, was ich hätte tun sollen?
Vielen Dank für jede Hilfe, die Sie bieten können, und bitte zögern Sie nicht, für weitere Informationen zu fragen, wenn Sie es brauchen.
Überschreiben Sie wirklich die Eigenschaft name in Ihrem echten Code? Das heißt, [waffe setName: [...]] wird dreimal hintereinander aufgerufen. –
Nein, ich habe nur falsch kopiert/eingefügt. Ich habe es in meiner Frage korrigiert. –
Sie könnten echten Code veröffentlichen. Vermutlich ist die Nichtübereinstimmung einer Deklaration einer Klassenmethode und einer Instanzmethode falsch, und die Kosten sind "objectAtIndex: 0". –