Параметры для потока Objective-C - PullRequest
0 голосов
/ 14 декабря 2011

Попытка использовать переменные класса в потоке и получение EXC_BAS_ACCESS. Фрагмент кода:

@interface ViewController : UIViewController {    
    NSString* accountLoginName;
    NSString* accountPassword; 
}

в реализации:

accountLoginName = [NSString stringWithString:textFieldLoginName.text];
accountPassword = [NSString stringWithString:textFieldPassword.text];
[self performSelectorInBackground:@selector(loginAtBackgroundSelector:) withObject:nil]; 


-(void)loginAtBackgroundSelector:(UIAlertView*)alert
{   
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSLog(@"%@\n%@", accountLoginName, accountPassword);
    [self login];
    [self dismissAlert:alert];
    [pool release];
}

просто пытается записать в консоль и получает ошибку в этой части кода, но время от времени появляется ошибка в loginAtBackgroundSelector.

-(AlertType)login
{
     NSLog(@"%@\n%@", accountLoginName, accountPassword);
}

1 Ответ

0 голосов
/ 14 декабря 2011

Попробуйте это в интерфейсе:

@interface ViewController : UIViewController {    
    NSString* accountLoginName;
    NSString* accountPassword; 
}
@property(nonatomic, retain) NSString* accountLoginName;
@property(nonatomic, retain) NSString* accountPassword;

И это в реализации (в месте, где вы присваиваете значения):

self.accountLoginName = [NSString stringWithString:textFieldLoginName.text];
self.accountPassword = [NSString stringWithString:textFieldPassword.text];
[self performSelectorInBackground:@selector(loginAtBackgroundSelector:) withObject:nil];

Дополнительно в dealloc:

-(void)dealloc {
    [accountLoginName release];
    [accountPassword release];
    [super dealloc];
}

Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...