0

NSSet から実装された NSArray 要素があり、テーブル ビュー セルに要素を表示しようとすると、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

これは、インスタンス変数を保持せずに自動解放されたオブジェクトに設定しているためだと思います。

「セット」および「配列」保持プロパティを作成して実行します

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 に答える