Filled NSArray 无意中丢失了它的内容

Posted

技术标签:

【中文标题】Filled NSArray 无意中丢失了它的内容【英文标题】:Filled NSArray unintentionally loses its content 【发布时间】:2011-10-16 18:19:57 【问题描述】:

数组已正确填充,但当我再次尝试访问内容时,似乎又是空的了!!尝试发布尽可能多的代码。感谢您的帮助。

我在 .h 文件中声明 appData:

@interface userViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> 

    NSArray *appData;

    IBOutlet UIActivityIndicatorView *activityIndicator;
    IBOutlet UILabel *status;
    IBOutlet UITableView *mainTable;


@property (nonatomic, retain) NSArray *appData;
@property (nonatomic, retain) UIActivityIndicatorView *activityIndicator;
@property (nonatomic, retain) UILabel *status;
@property (nonatomic, retain) UITableView *mainTable;


- (IBAction) refresca: (id)sender;

- (void)getData: (NSString *)usuari: (NSString *)clau;

@end

在.m文件中合成并发布。 appData 在连接请求结束时被正确填充,然后,当我重新加载 tableview 时,当 numberOfRowsInSection 执行时(while 循环也是为了测试),appData 为空!

- (void)requestFinished:(ASIHTTPRequest *)request 
    NSLog(@"%@", [request responseString]);

    self.appData = [[request responseString] componentsSeparatedByString: @"#"]; 

    int x =0;

    while (x<[appData count] - 1)
    
        NSLog(@"Aplicaciones = %@",[appData objectAtIndex: x]);
        x = x+1;
    

    [activityIndicator stopAnimating];
    activityIndicator.hidden = YES;
    status.hidden = YES;
    mainTable.hidden = NO;

    [mainTable reloadData];


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
     
    if ([appData count] != 0)
    
        NSLog(@"Counter = %@",[appData objectAtIndex:0]);
    

    return [appData count]-1;

【问题讨论】:

你能把你在“cellForRowAtIndexPath”中使用的代码贴出来吗? while (x&lt;[appData count] - 1) 如果您的数组包含 1 个元素,它将不会进入循环,numberOfRowsInSection 将返回 0。我不明白您为什么在 @ 中放置一个 while 循环来调试代码987654325@. 是的,同意,我复制代码时出错了。已编辑。 【参考方案1】:

这里有几件事。

如果 appdata 的计数不为零,您在 numberOfRows 中的测试日志记录将导致应用挂起。

您确定您获得的 appData 对象与您在 requestFinished 中填充的对象相同吗?

我建议在 numberOfRows 中使用访问器,就像在 [self.appData count] 中一样,这可能会解决问题。

您从计数中减去一个是否有特定原因?因为这样你会从 tableView 中的数组中丢失一个元素

【讨论】:

[self.appData count] 很可能会修复它。 答案:是的,请求中填充的相同对象已完成。减去 1 是因为 is 和结束字符串且没有有用的数据可显示 您是否为 numberOfSections 委托方法返回至少 1 个? 已解决,在视图控制器完成启动之前触发了asirequest,因此未正确分配appData!谢谢你让我进去看看!

以上是关于Filled NSArray 无意中丢失了它的内容的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 中动画插入/删除的 2 个 NSArray 的区别

CALayer似乎保留了它的内容——如何释放资源? [复制]

对象在预加载脚本中传递给函数后丢失其类型

Geoviews Filled Contours:保持填充颜色但删除轮廓线

objective-c 空 NSArray 错误

如何检测蓝牙设备是不是超出范围,或者我们丢失了它?