30

私のプロジェクトでは、非推奨の警告があります。initWithFrame:reuseIdentifier:は非推奨です

それが何を意味するのかわかりません。誰かがこの警告を解決する方法を教えてもらえますか?

これがショートコードです

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }

    // Set up the cell...
    NSString *cellValue = [itemsList objectAtIndex:indexPath.row];
    cell.textLabel.text = cellValue;

    return cell;
}

そして警告はその行にあります:

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
4

4 に答える 4

60

このAppleのページを見てください

ここで赤く強調表示された関数とプロパティは、今後のSDKでAppleによって将来削除される予定です。

アプリの作成中にそれらを回避する必要があるためです。

クラッシュすることなく実行できる長期プロジェクトが必要だからです。

非推奨のメソッドは、置き換え/廃止されたが、現在のバージョンの言語ではまだ有効であることを意味します。回避する必要があり、問題/エラーを引き起こす可能性があります。使用できる代替方法をリストする必要があるドキュメントを確認してください。

ここでは、メソッドを使用する必要があります

 - initWithStyle:reuseIdentifier: 

次に、ifループは次のようになります

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
              reuseIdentifier:CellIdentifier] autorelease];
}
于 2011-08-06T14:40:04.823 に答える
9

この問題は、Mark、Nutting、および La Marche による Beginning IOS 5 Development に記載されています。一部の読者は、非推奨のコードが 265 ページに掲載されている本からここに来るかもしれません。

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier: sectionsTableIdentifier] autorelease];

(上記の貢献者が指摘しているように)に置き換える必要があります

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: sectionsTableIdentifier];

自動参照カウントが気に入らないため、自動リリースも削除したことに注意してください。

お役に立てれば。

于 2012-08-27T14:43:10.643 に答える
1

次のコードを使用します。

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                 reuseIdentifier:CellIdentifier] autorelease];
于 2012-06-06T09:31:04.737 に答える
0

これで問題が解決するはずです:

static NSString *SimpleTableIdentifier;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero
                                   reuseIdentifier:SimpleTableIdentifier] autorelease];
}
于 2012-07-19T06:55:41.410 に答える