CFString isNaturallyRTL - сообщение отправлено освобожденному экземпляру - PullRequest
0 голосов
/ 06 декабря 2010

Я уже погуглил для "CFString isNaturallyRTL" с 0 результатами.

это мои классы:

//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;
    [...]
  }
}

Теперь у меня есть вид, который открывается при касании кнопки, что содержит два текстакоробки и кнопка.Вот так.

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

Все правильно, скомпилируйте и запустите.

Первый раз, когда я нажимаю drawRouteTextboxes, он открывает мой вид с установленным текстом по умолчанию ("Roma" и "lecce"),Во второй раз я открываю вид, редактирую текстовое поле и вызываю drawRoute.Все нормально.В третий раз, когда я вызываю drawRouteTextboxes, он возвращает мне эту ошибку времени выполнения:

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

Я не знаю, в чем проблема ... Кто-то знает решение?Впервые я вижу эту ошибку!

спасибо, Альберто.

1 Ответ

1 голос
/ 06 декабря 2010

Все правильно, скомпилируйте и запустите.

Если бы все было правильно, он работал бы без ошибок. ;)

Это выглядит подозрительно:

fromText = from.text; toText = to.text;

Если from.text и to.text возвращают либо автоматически выпущенные объекты, либо объекты, которые впоследствии были освобождены, то вышеприведенное не сохраняет строки и может легко привести к проблеме чрезмерного выпуска, как вы видите.

Вместо этого используйте self.fromText = from.text;.

Обратите внимание, что свойства NSString* должны почти всегда быть copy, а не retain.

...