保留一个NSMutableArray的值?
我刚被卡住了。我有2个视图控制器,一个是“WatchListViewController
”,第二个是“QuotesViewController
”首先我从WatchListViewController
推到QuotesViewController
,我的动作写在这里。保留一个NSMutableArray的值?
-(IBAction)qoutes
{
QuotesViewController *nextController = [[QuotesViewController alloc] initWithQoutes:symbolForQoutes :exchangeForQoutes :appDelegate.s :code :exchange:exchangeCodeForQoutes];
[self.navigationController pushViewController:nextController animated:YES];
}
它完美的作品我initWithQoutes
方法也工作好,那么在ViewDidLoad
方法,我通过套接字发送一些请求到服务器,它提供了响应和效应初探在我的功能就是在WatchListViewController
收到:
void receiveData(CFSocketRef s, CFSocketCallBackType type, CFDataRef address, const void *data, void *info)
{
char *buffer = (char *)CFDataGetBytePtr((CFDataRef)data); //getting data from server side in a char type veriable "buffer"
NSString *result = [NSString stringWithUTF8String:buffer]; // getting data in a string from my buffer
if (strstr(buffer, "QRES") != NULL) { //if this is a qoutes response
splits = [result componentsSeparatedByString:@"|"]; //separating string by "|"
body = [splits objectAtIndex:1]; // choosing index "1"
splits = [body componentsSeparatedByString:@","]; // separating by ","
QuotesViewController *quotesViewController = [[QuotesViewController alloc] init];
[quotesViewController initWithData:splits];
return;
}
}
响应被接收,并且它转到方法initWithData
带有参数数组“分裂的” i收到此阵列中的我的initWithData并将其分配给我的其他阵列(generalArray
)现在一般阵列分配给我tableView
但在它之前reloadData
的tableView其控制返回receiveData
并返回并再次返回到我的QuotesViewController
并重新加载表视图,但当时我的数组(generalArray
)失去其值&值不会在表视图中加载值。 plz plz帮我我卡在这里。方法initWithData的
代码:
-(void)initWithData:(NSArray *)_general
{
general = [[NSMutableArray alloc] init]; //initializing array that can be accessed out of the class
for (int i=0; i< [_general count]; i++) {
[general addObject:[_general objectAtIndex:i]]; }
NSLog(@"%@", general); [self generalValues];
}
-(void)generalValues{
[generalTableView reloadData];
}
你在你的C函数在这里创建一个QuotesViewController
实例作为 -
[quotesViewController initWithData:splits];
你是不是存储到该控制器的参考。这种QuotesViewController
的实例极有可能在generalArray
中具有合适的值。但是由于您没有将其存储起来供以后使用,因此引用会丢失并且会创建内存泄漏。
现在,如果继续创建另一个QuotesViewController
实例,它将不会有更早的generalArray
数据,因为它是一个新实例。由于我不了解程序的流程,我发现很难提出一种正确的方法,但将函数或数组本身的引用保存是正确的。如果保存了引用,只需将其保存到数组中,就可以将其推送到导航控制器中,您可以使用init方法传递它。
编辑
既然你说影响同一控制器,则需要通过参考功能。
void receiveData(CFSocketRef s, CFSocketCallBackType type, CFDataRef address, const void *data, void *info, QuotesViewController *controller)
{
char *buffer = (char *)CFDataGetBytePtr((CFDataRef)data); //getting data from server side in a char type veriable "buffer"
NSString *result = [NSString stringWithUTF8String:buffer]; // getting data in a string from my buffer
if (strstr(buffer, "QRES") != NULL) { //if this is a qoutes response
splits = [result componentsSeparatedByString:@"|"]; //separating string by "|"
body = [splits objectAtIndex:1]; // choosing index "1"
splits = [body componentsSeparatedByString:@","]; // separating by ","
[controller initWithData:splits];
return;
}
}
希望这应该做到这一点。
你应该学习内存管理在Objective-C。您使用componentsSeparatedByString
创建的数组是通过该方法自动释放的。所以,当你将它传递到QuotesViewController的initWithData
方法,你需要的,如果你不知道该怎么做的东西,保留其在该法像
generalArray = [splits retain];
安置自己initWithData
代码。
thanx for reply这里是代码 - (void)initWithData:(NSArray *)_ general { \t general = [[NSMutableArray alloc] init]; //初始化,可以从类的访问的阵列 \t的for(int i = 0; I Mashhadi 2011-05-18 13:54:42
你可以将你的代码作为编辑发布到你的问题吗?很难将它全部阅读成这样的评论。 – CharlieMezak 2011-05-18 13:55:53
@Mashhadi:你可以避免将'_general'复制到'general'的循环:'general = [_general mutableCopy]' – SSteve 2011-05-18 13:58:48
在此代码:
QuotesViewController *quotesViewController = [[QuotesViewController alloc] init];
[quotesViewController initWithData:splits];
要初始化quotesViewController
两次。第二次初始化它时,您不存储返回值,因此您的参考将丢失。相反,你应该写
QuotesViewController *quotesViewController = [[QuotesViewController alloc] initWithData:splits];
试试看看是否有帮助。
当我读到最后一个声明时,我可能会清楚该链接是否丢失。 – Radix 2011-05-18 13:00:07