/ / NSUndoManager nezachováva zásobník s redo / zrušením pre iPhone aplikáciu pre kresby UnDo / Redo - iphone, objective-c, undo, nsundomanager, redo

NSUndoManager nezachováva zásobník s redo / undo pre iPhone aplikáciu pre kresby UnDo / Redo - iphone, objective-c, undo, nsundomanager, redo

Staviam iPhone aplikáciu s Cieľom C. V mojej aplikácii som kresliť tahy na obrázku a chcem implementovať funkciu vrátiť späť a redo.

Použil som NSUndoManager pre to. Týmto som schopný vrátiť späť svoju kresbu do jednej úrovne nadol, ale mojou požiadavkou je zrušiť kresbu na najnižšej možnej úrovni (alebo minimálne na úrovni 10). Už som nastavil setLevelsOfUndo až 10, ale to nefunguje.

Používam nasledujúci kód:

- (void)UnDoImage1:(UIImage*)image
{
if (capturedImage.image != image)
{
[self.managedObjectContext.undoManager undo];
[[self.managedObjectContext.undoManager prepareWithInvocationTarget:self] UnDoImage1:capturedImage.image];
[capturedImage release];
capturedImage.image = [image retain];
}
}

Dajte mi vedieť, kde som nesprávny. Už som Googlu za to dlho, ale nenašiel presnú príčinu zlyhania funkčnosti.

odpovede:

0 pre odpoveď č. 1

Neverím, že môžete použiť prepareWithInvocationTarget: s objektom ako parametrom. Jeho nebude držať kópiu capturedImage.image okolo pre Stack Undo / Redo. Takže odkedy ho uvoľníte a nastavíte na nový obrázok, odkaz na originál sa stratí a budete jednoducho volať UnDoImage1: s aktuálnym capturedImage.image

Ak je to jediná vec, ktorú hľadáte na zrušenie / opakovanie, potom by som sa pozrel na registerUndoWithTarget:selector:object: bude sa držať odkazu na capturedImage.image.

Scott <-