Klon eller Kopiere UIViewController eller UIView

UII har brug for kopi, selv controller eller selvstændig.se, jeg har prøvet:

UIView* viewOfSelf =[self.view copy];
UIViewController* controller = [self copy];

UIView* viewOfSelf =[self.view mutableCopy];
UIViewController* controller = [self mutableCopy];

Fejlen er:

    -[UIViewController mutableCopyWithZone:]: unrecognized selector sent to instance 0xb803490
    -[UIView copyWithZone:]: unrecognized selector sent to instance 0x6e0acb0
hvad er den klasse af self ? MyViewController ? Jeg tror, der er ingen bevægelige kopi af UIView og UIViewController

OriginalForfatteren Davidin073 | 2012-05-16

3 svar

  1. 30

    Brug –

    NSData *tempArchiveView = [NSKeyedArchiver archivedDataWithRootObject:self.view];
    UIView *viewOfSelf = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveView];

    Tilsvarende –

    NSData *tempArchiveViewController = [NSKeyedArchiver archivedDataWithRootObject:self];
    UIViewController *controller = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveViewController];
    Ikke få alt som tilpassede bevægelser, etc.
    Hmm ikke få min UIImageView jeg havde som subview af den opfattelse, at jeg var kloning.

    OriginalForfatteren rishi

  2. 5

    For et objekt For at være copyable den skal gennemføre NSCopying protokol, som UIView klassen eller UIViewController klasse ikke.

    Hvis du vil kopiere en udsigt, jeg er temmelig sikker på, at du laver noget forkert. Kopiering bør erstattes af genanvendelige UIView ligesom i UITableView hjælp dequeueReusableCellWithIdentifier: metode.

    Kopiering view controller er helt sikkert en anti-mønster. Hvis du ønsker, at nøjagtig kopi af den opfattelse, controller, som du allerede har – for at oprette en ny instans af det med samme parametre, som den nuværende.

    Selvom Rishi ‘ s svar virkede for mig så godt, men at skabe nye tilfælde vist sig at være en mere pålidelig løsning til mit problem. Tak!

    OriginalForfatteren Eimantas

  3. 4

    Desværre er jeg endnu ikke lov til at kommentere, men rishi ‘ s løsning er ét problem: det er ikke tilladt at kopiere NSLayoutConstraints. Så hvis nogen af dine synspunkter er hjælp autolayout, dem, der ikke kommer til at få kopieret. Jeg skriver en mini-lib til at løse det, og vil sende det til github når du er færdig. Desværre, jeg har ikke fundet en klar-til-brug-løsning, hvor som helst.

    //Redigere

    Ked af, hvad jeg skrev tidligere ikke var helt korrekte. Jeg gjorde noget mere forskning, og det viser sig, at den standard, NSLayoutConstraints i de arkiverede udsigt, gemmes IKKE. Men, kan du faktisk angive, hvis du ønsker at arkivere en begrænsning, ved at angive dens shouldBeArchived ejendom til YES. Så, selv efter at denne falske copy, bevarer du retten begrænsninger i den kopierede visning.

    OriginalForfatteren czechboy

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *