Нужно сохранить CFSocketRef? - PullRequest
0 голосов
/ 14 мая 2011

Я столкнулся с проблемой: у меня есть два контроллера представления, viewController1 и viewController2.Вот метод, который меня беспокоит в viewController1:

-(void)msgToServer:(NSString*)identifier:(NSString *)_username{
    NSString *message = [NSString stringWithFormat:@"%@|%@|<END>", identifier, _username]; 
    CFDataRef messageData = (CFDataRef)[message dataUsingEncoding:NSUTF8StringEncoding];

    CFSocketSendData(s, NULL, messageData, 0);
}

, этот метод прекрасно работает в viewController1.

Теперь я вызываю этот метод из viewController2.Я передаю два аргумента, identifier и _username.Он генерирует строку отлично, но когда он достигает последней строки, он пропускает значение s - это CFSocketRef.Что я должен сделать, чтобы s сохранил свое значение, даже если я нахожусь в viewController2?

Коде от viewController2, который вызывает вышеуказанный метод:

- (void)viewDidLoad {
    [super viewDidLoad];
    WatchListViewController *watchListViewController = [[WatchListViewController alloc]init];
    [watchListViewController msgToServer:@"PREQ" :userName];
}

Спасибозаранее.

Ответы [ 2 ]

0 голосов
/ 17 мая 2011

Спасибо всем, кто помог мне хорошо, я решил эту проблему следующим образом: когда я нажимаю с viewController1 на viewController2, я передаю два параметра "username" и "s" на viewController2, а затем язапишите этот метод в viewController2.

-(void)msgToServer:(NSString*)identifier:(NSString *)_username{
    NSString *message = [NSString stringWithFormat:@"%@|%@|<END>", identifier, _username]; 
    CFDataRef messageData = (CFDataRef)[message dataUsingEncoding:NSUTF8StringEncoding];

    CFSocketSendData(s, NULL, messageData, 0);
}

, затем я вызываю этот метод в том же контроллере представления, и он работает отлично.Я думаю, что это единственное решение, которое я нахожу.если какое-либо тело может сделать это более эффективным, тогда пожалуйста.:)

0 голосов
/ 14 мая 2011

Вы можете использовать retain функцию NSObject.

- (id)retain

См. В документации Apple

Также обратите внимание на ОбъектПраво собственности и распоряжение в Руководстве по программированию управления памятью

РЕДАКТИРОВАНИЕ:

Попробуйте использовать приведенный ниже код

Возможно, у вас возникла проблема с прототипом функции, а нес сохранением.

используйте ниже -(void)msgToServer:(NSString*)identifier withUsername:(NSString *)_username;.

- (void)viewDidLoad {
    [super viewDidLoad];
    WatchListViewController *watchListViewController = [[WatchListViewController alloc]init];
    [watchListViewController msgToServer:@"PREQ" withUsername:userName];
}

-(void)msgToServer:(NSString*)identifier      withUsername:(NSString *)_username{
    NSString *message = [NSString stringWithFormat:@"%@|%@|<END>", identifier, _username]; 
    CFDataRef messageData = (CFDataRef)[message dataUsingEncoding:NSUTF8StringEncoding];

    CFSocketSendData(s, NULL, messageData, 0);
}
...