SORU
3 Kasım 2010, ÇARŞAMBA


Uygulama NSCopying

NSCopying belgeleri okudum ama gerekli uygulama konusunda hala çok emin değilim.

Benim sınıf 7**:

@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

Vendor sınıf eşyaları Car adlı bir dizi var.

Car benim nesne:

@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

Yani Vendor Car nesneleri bir dizi tutar. Car diğer özel nesneler 2 diziler tutar.

Vendor Car hem bir sözlük ınit. Bu yöntemlerden biri de eklerim, onlar ya da ilgili olmayabilir.

-(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;
}

Korkunç sorunu özetlemek için.

Vendor nesneleri bir dizi kopyalamak istiyorum. Ben inanmak istiyorum uygulamak NSCopying protokol Vendor, olabilir demek istiyorum uygulamak için ayrıca on Car Vendor tutan bir dizinin Carler. Ben de 2 diziler Car nesneye ait düzenlenen sınıflar üzerinde uygulamak gerekir anlamına gelir.

Gerçekten eğer Vendor, NSCopying protokol bu herhangi bir yerde herhangi bir öğreticiler bulamıyorum uygulama konusunda bazı ipuçları alabilirsem sevinirim.

CEVAP
3 Kasım 2010, ÇARŞAMBA


NSCopying, nesneye uygulamak için -copyWithZone: seçici yanıt vermek zorundadır. Size uyan ilan:

@interface MyObject : NSObject <NSCopying> {

O zaman, nesne uygulaması (.m dosya):

- (id)copyWithZone:(NSZone *)zone
{
    // Copying code here.
}

Kodunuzu ne yapmalıyım? İlk olarak, nesne—[[[self class] alloc] init] iyi sınıflara için çalışan geçerli sınıfının başlatılmış bir obejct almak için arayabilir yeni bir örneğini oluşturun. O zaman, herhangi bir örnek için değişken kopyalama destekler NSObject bir alt sınıfı, yeni nesne için [thatObject copyWithZone:zone] diyebilirsin. İlkel türler (int, char, BOOL ve arkadaşlar) sadece değişkenleri eşit olacak şekilde ayarlamak için. Yani, obejct Satıcı için, bu gibi görünür:

- (id)copyWithZone:(NSZone *)zone
{
    id copy = [[[self class] alloc] init];

    if (copy) {
        // Copy NSObject subclasses
        [copy setVendorID:[[self.vendorID copyWithZone:zone] autorelease]];
        [copy setAvailableCars:[[self.availableCars copyWithZone:zone] autorelease]];

        // Set primitives
        [copy setAtAirport:self.atAirport];
    }

    return copy;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bucky Roberts

    Bucky Robert

    9 HAZİRAN 2011
  • graham025

    graham025

    25 NİSAN 2006
  • Matthew Pearce

    Matthew Pear

    9 AĞUSTOS 2009