J'ai lu le NSCopying
mais je ne sais toujours pas comment mettre en œuvre ce qui est requis.
Ma classe Vendor
:
@interface Vendor : NSObject
{
NSString *vendorID;
NSMutableArray *availableCars;
BOOL atAirport;
}
@property (nonatomic, copy) NSString *vendorID;
@property (nonatomic, retain) NSMutableArray *availableCars;
@property (nonatomic, assign) BOOL atAirport;
- (id)initFromVehVendorAvailsDictionary:(NSDictionary *)vehVendorAvails;
@end
En Vendor
possède un tableau d'objets appelés Car
.
Mon Car
objet :
@interface Car : NSObject
{
BOOL isAvailable;
NSString *transmissionType;
NSMutableArray *vehicleCharges;
NSMutableArray *fees;
}
@property (nonatomic, assign) BOOL isAvailable;
@property (nonatomic, copy) NSString *transmissionType;
@property (nonatomic, retain) NSMutableArray *vehicleCharges;
@property (nonatomic, retain) NSMutableArray *fees;
- (id) initFromVehicleDictionary:(NSDictionary *)vehicleDictionary;
@end
Donc, Vendor
contient un tableau de Car
objets. Car
contient 2 tableaux d'autres objets personnalisés.
Les deux sites Vendor
y Car
sont init d'un dictionnaire. Je vais ajouter une de ces méthodes, elles peuvent être pertinentes ou non.
-(id)initFromVehVendorAvailsDictionary:(NSDictionary *)vehVendorAvails {
self.vendorCode = [[vehVendorAvails objectForKey:@"Vendor"]
objectForKey:@"@Code"];
self.vendorName = [[vehVendorAvails objectForKey:@"Vendor"]
objectForKey:@"@CompanyShortName"];
self.vendorDivision = [[vehVendorAvails objectForKey:@"Vendor"]
objectForKey:@"@Division"];
self.locationCode = [[[vehVendorAvails objectForKey:@"Info"]
objectForKey:@"LocationDetails"]
objectForKey:@"@Code"];
self.atAirport = [[[[vehVendorAvails objectForKey:@"Info"]
objectForKey:@"LocationDetails"]
objectForKey:@"@AtAirport"] boolValue];
self.venLocationName = [[[vehVendorAvails objectForKey:@"Info"]
objectForKey:@"LocationDetails"]
objectForKey:@"@Name"];
self.venAddress = [[[[vehVendorAvails objectForKey:@"Info"]
objectForKey:@"LocationDetails"]
objectForKey:@"Address"]
objectForKey:@"AddressLine"];
self.venCountryCode = [[[[[vehVendorAvails objectForKey:@"Info"]
objectForKey:@"LocationDetails"]
objectForKey:@"Address"]
objectForKey:@"CountryName"]
objectForKey:@"@Code"];
self.venPhone = [[[[vehVendorAvails objectForKey:@"Info"]
objectForKey:@"LocationDetails"]
objectForKey:@"Telephone"]
objectForKey:@"@PhoneNumber"];
availableCars = [[NSMutableArray alloc] init];
NSMutableArray *cars = (NSMutableArray *)[vehVendorAvails objectForKey:@"VehAvails"];
for (int i = 0; i < [cars count]; i++) {
Car *car = [[Car alloc] initFromVehicleDictionary:[cars objectAtIndex:i]];
[availableCars addObject:car];
[car release];
}
self.venLogo = [[[vehVendorAvails objectForKey:@"Info"]
objectForKey:@"TPA_Extensions"]
objectForKey:@"VendorPictureURL"];
return self;
}
Donc, pour résumer le problème effrayant.
J'ai besoin de copier un tableau de Vendor
objets. Je pense que je dois implémenter le NSCopying
le protocole sur Vendor
ce qui peut signifier que je dois l'implémenter aussi sur Car
depuis Vendor
contient un tableau de Car
s. Cela signifie que je dois également l'implémenter sur les classes qui sont contenues dans les 2 tableaux appartenant à l'élément Car
objet.
J'apprécierais vraiment si je pouvais avoir des conseils pour mettre en place NSCopying
le protocole sur Vendor
Je n'ai trouvé aucun tutoriel sur ce sujet.
0 votes
Avez-vous lu la documentation de NSCopying ? Je l'ai trouvée assez claire quand c'était nécessaire.
5 votes
Oui, lisez et relisez-le. Je trouve rarement que les docs d'Apple sont faciles à utiliser pour apprendre, bien qu'ils soient très utiles pour trouver des méthodes, etc. pendant la programmation. Merci - Code