2010-12-06 6 views
0

Ich googelte bereits für "CFString IsNaturallyRTL" mit 0 Ergebnissen.CFString isNaturallyRTL - Nachricht an freigegebene Instanz gesendet

das sind meine Klassen:

//in .H 
@interface myViewController : UIViewController { 
UITextField *from; 
UITextField *to; 
NSString *fromText; 
NSString *toText; 
} 

@property (nonatomic, retain) NSString* fromText; 
@property (nonatomic, retain) NSString* toText; 
@property (nonatomic, retain) UITextField *from; 
@property (nonatomic, retain) UITextField *to; 

//in .m 
@synthesize from, to; 
@synthesize fromText, toText; 

viewDidLoad(...) { 
    fromText = @"Roma"; 
    toText = @"Lecce"; 
} 

- (void) drawRoute { 
    if (([[from text] length] > 2) && ([[to text] length] > 2)) 
{ 
    fromText = from.text; 
    toText = to.text; 
    [...] 
    } 
} 

Nun, ich habe eine Ansicht, die auf Tastendruck tha öffnen enthält zwei Textfelder und eine Schaltfläche. So was.

- (void) drawRouteTextboxes { 
from = [[UITextField alloc] initWithFrame: [...] ]; 
from.text = fromText; 
from.delegate = self; 
[ctr.view addSubview:from]; 
[from release]; 

    to = [[UITextField alloc] initWithFrame: [...] ]; 

    [...] 

    [searchButton addTarget:self action:@selector(drawRoute) forControlEvents: UIControlEventTouchUpInside]; 
} 

Es ist alles korrekt, kompilieren und ausführen.

Wenn ich zum ersten Mal auf drawRouteTextboxes klicke, öffnet sich meine Ansicht mit dem voreingestellten Standardtext ("Roma" und "lecce"). Zum zweiten Mal öffne ich die Ansicht, editiere das Textfeld und rufe drawRoute auf. Es ist in Ordnung. Das dritte Mal, dass ich drawRouteTextboxes nenne es mir diese Laufzeitfehler zurück:

*** -[CFString _isNaturallyRTL]: message sent to deallocated instance 0x3a8d140 

Ich weiß nicht, wo das Problem ist ... jemand eine Lösung wissen? Es ist das erste Mal, dass ich diesen Fehler sehe!

danke, Alberto.

Antwort

1

It's all correct, compile and run.

Wenn alles korrekt war, würde es ohne Fehler laufen. ;)

Das sieht verdächtig:

fromtext = from.text; toText = to.text;

Wenn from.text und to.text entweder automatisch freigegebene Objekte oder Objekte zurückgeben, die später freigegeben werden, dann behält das obige die Zeichenfolgen nicht bei und kann leicht zu einem Problem mit zu großer Freigabe führen, wie Sie sehen.

Verwenden Sie stattdessen self.fromText = from.text;.

Beachten Sie, dass NSString* Eigenschaften fast sollten immercopy und nicht retain sein.

+0

ok, vielen Dank! – elp

Verwandte Themen