2

更新:私はまだこのアプリの初期段階だったので、最初からやり直すことにしました。私はすべてを繰り返しましたが、何らかの理由で、カスタムセルは2回目になりました。この問題を抱えているのは私だけではないと思うので、別の答えを確認するために古いファイルを保管しておきます。

テーブルビューにカスタムセルを必要とするタブ付きアプリケーションを構築しています。私はこれを数回行いましたが、これらのカスタムセルを接続すると、常にスピードバンプにぶつかるようです。テーブルビューコントローラーでSongsTVCという名前のカスタムセルを使い始めるまで、アプリは正常に起動しました。次の理由で終了を受け取りました。

[<SongsTVC 0x6831330> setValue:forUndefinedKey:]: 
this class is not key value coding-compliant for the key albumLabel.

私はこのチュートリアルを使用しており、以前に使用したことがあり(ARCおよびiOS 5のいくつかの変更点)、成功しています。実際、私が使用しているコードとIBレイアウトは、すでに機能しているプロジェクトに基づいています。セル自体ではなくファイルの所有者にアウトレットを接続すると、このエラーが一般的に発生することを認識しています。私はこの間違いを犯していませんが、それでも私にこのエラーを与えています。これまでのところ、問題のあるラベルを削除し、最初からやり直すためにセルのファイルを完全に削除しました。どんな助けでもいただければ幸いです。

SongCell.h

#import <UIKit/UIKit.h>

@interface SongCell : UITableViewCell{

}

@property(nonatomic, assign) IBOutlet UILabel *titleLabel;
@property(nonatomic, assign) IBOutlet UILabel *artistLabel;
@property(nonatomic, assign) IBOutlet UILabel *albumLabel;

@end

SongCell.m

#import "SongCell.h"

@interface SongCell ()

@end

@implementation SongCell

@synthesize titleLabel, artistLabel, albumLabel;

@end

SongsTVC.h-TableViewControllerのヘッダー

#import <UIKit/UIKit.h>

@interface SongsTVC : UITableViewController{
    UINib *cellLoader;
}

@end

SongsTVC.m-関連するTableViewControllerメソッド

#import "SongsTVC.h"
#import "SongCell.h"

@interface SongsTVC ()

@end

static NSString *CellClassName = @"SongCell";

@implementation SongsTVC

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
        cellLoader = [UINib nibWithNibName:CellClassName bundle:[NSBundle mainBundle]];
    }
    return self;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    SongCell *cell = (SongCell *)[tableView dequeueReusableCellWithIdentifier:CellClassName];

    if (!cell)
    {
        //CRASH ERROR POINTS HERE
        NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil];
        cell = [topLevelItems objectAtIndex:0];
    }

    // Configure the cell...
    cell.titleLabel.text = @"SONG";
    cell.artistLabel.text = @"Artist";
    cell.albumLabel.text = @"Album";

    return cell;
}

InterfaceBuilder セル、そのアウトレット、およびそのクラス


ファイルの所有者

報告する

注:セル識別子はIBで「SongCell」に設定されており、複数のテーブルがこのセルを使用するため、ファイルの所有者はUITableViewControllerです。ビューがテーブルである限り、機能するはずです(過去に使用されていました)。


更新:XML形式のxibファイルがここに貼り付けられました。

4

3 に答える 3

2

私は今日、別のSO回答のサンプルプロジェクトを作成しているときに、この正確な問題を抱えていました。xibがセルではなくViewControllerにコンセントを接続しようとしているようです。スクリーンショットでは、アウトレットは正しく定義されているように見えますが、古いアウトレット定義が基になるXMLに残り、このタイプのクラッシュが発生する場合があります。

たとえば、いくつかのアウトレットを接続した後にファイル所有者クラスを変更した場合、これは混乱を招く可能性があります。

xibを「ソースコード」として開いて要素を探し、期待するエントリだけがあることを確認することで、それを見つけることができる場合があります。おそらく、XMLファイルも検索しalbumLabelてください。

それでも問題が解決しない場合は、xibを廃棄してやり直す必要があります。

于 2012-05-22T17:41:36.317 に答える
1

残念ながら、私が見つけた唯一の解決策は最初からやり直すことでした。私は以前とまったく同じようにすべてを行い、2回目はうまくいきました。すべてを廃棄して最初からやり直すのはかなり面倒でしたが、それを機能させる唯一の方法でした。誰かが何が起こったのか理解できない限り、私はこれを答えとして残しておきます。(元の投稿とその更新を参照してください)

于 2012-06-03T19:33:12.147 に答える
0

同様の問題があり、ストーリーボード/NIBを再構築することで解決できました。

于 2013-10-27T19:06:22.350 に答える