0

我有从 NSSet 实现的 NSArray 元素,如果我尝试在 Table View Cell 中显示元素,我在 tableView numberOfRowsInSection 部分遇到 BAD ACCESS 问题。这是我的代码

- (void)viewDidLoad
{
[super viewDidLoad];




jsonurl=[NSURL URLWithString:@"http://www.sample.net/products.php"];//NSURL

jsondata=[[NSString alloc]initWithContentsOfURL:jsonurl];//NSString
jsonarray=[[NSMutableArray alloc]init];//NSMutableArray

self.jsonarray=[jsondata JSONValue];

array=[jsonarray valueForKey:@"post_title"];

set = [NSSet setWithArray:array];//NSMutableSet
array=[set allObjects];//NSArray


NSLog(@"%@",array);



}


#pragma mark - Table view data source

  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [array count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil)  
{        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];



}
// Configure the cell...

cell.textLabel.text = [self.array objectAtIndex: [indexPath row]];    
return cell;
}

请帮助。在此先感谢。

4

2 回答 2

2

在您的代码中,您没有分配数组。您正在为该数组设置一个自动释放的对象,这就是您收到此错误的原因。

替换array=[set allObjects];array=[[set allObjects] retain];

于 2012-08-02T06:07:34.893 回答
1

我认为这是因为您将实例变量设置为自动释放的对象而不保留它们。

要么制作“set”和“array”保留属性并执行

self.set = [NSSet setWithArray:self.array];

// This is already a bit weird... If the set is made from the array, the array will be unchanged.
self.array = [self.set allObjects];

或者只是保留它们:

set = [[NSSet setWithArray:array] retain];

等等

由于 setWithArray 和 allObjects 返回自动释放的对象,一旦离开 viewDidLoad 的范围,就会留下悬空指针。

于 2012-08-02T06:08:17.067 回答