0

テーブル ビューから詳細ビューに切り替えようとしています。セルをクリックするとクラッシュします。ブレークを使用して、コード内でクラッシュする場所を見つけようとしましたが、特定の行が見つかりません。テーブル ビューから詳細ビューにセグエを実行するとクラッシュします。詳細ビューにいくつかの変数を渡したいのですが、最初に詳細ビューに切り替える必要があります。私はストーリーボードfyiを使用しています。どんな助けでも大歓迎です。

更新: クラッシュ ログは次のとおりです。

arg c = (int) 1
arg v = (char **) 0x2fd63cdc

これはクラッシュが発生している行です

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

更新 2

コードをステップ実行しているときにクラッシュする前のコードの最後のセクションは、segue 関数の準備です。そこにあるコードの最後の行の後、クラッシュして上の行に移動します。

更新 3

コンソールが非表示になっていることに気付いたので、これがコンソールに表示されるエラーです。セグエの準備中の両方の nslog が呼び出されました。

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<DetailViewController 0x1e098bd0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key name.'
*** First throw call stack:
(0x3a1e63e7 0x39072963 0x3a1e60d5 0x3a418fe9 0x3a414d53 0x3a16c8a5 0x39665d7d 0x396655ff 0x3955e039 0x394e8421 0x3953d1b7 0x3953d0fd 0x3953cfe1 0x3953cf0d 0x3953c659 0x3953c541 0x3952ab33 0x3952a7d3 0x3958b2ad 0x3960dca1 0x3a4b9e67 0x3a1bb857 0x3a1bb503 0x3a1ba177 0x3a12d23d 0x3a12d0c9 0x3746633b 0x3951d291 0x69a9 0x3a91eb20)
libc++abi.dylib: terminate called throwing an exception

RootViewController.m

#import "RootViewController.h"
#import "DetailViewController.h"



@implementation RootViewController

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    //Initialize the array.
    listOfItems = [[NSMutableArray alloc] init];

    //Add items
    [listOfItems addObject:@"Jane"];
    [listOfItems addObject:@"Johnny"];
    [listOfItems addObject:@"Deanne"];
    [listOfItems addObject:@"John"];
    [listOfItems addObject:@"Susan"];

    //Set the title
    self.navigationItem.title = @"Countries";
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#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 [listOfItems count];
}

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

    static NSString *CellIdentifier = @"MyCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

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


    return cell;
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    DetailViewController *DVC = [[DetailViewController alloc]init];
    DVC = [segue destinationViewController];
    NSIndexPath *path = [self.tableView indexPathForSelectedRow];
    NSString *name = [listOfItems objectAtIndex:path.row];
    DVC.name1.text = name;
}

RootViewController.h

#import <UIKit/UIKit.h>

@interface RootViewController : UITableViewController <UITableViewDataSource,UITableViewDelegate> {

    NSMutableArray *listOfItems;
    IBOutlet NSMutableArray *detailListOfItems;
}
@end

DetailViewController.m

#import "DetailViewController.h"



@implementation DetailViewController
@synthesize selectedCountry;
@synthesize name1;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}


- (void)viewDidLoad
{
    [super viewDidLoad];


    //Set the title of the navigation bar
    //self.navigationItem.title = name1.text;

}

DetailViewController.h

#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController


@property (nonatomic,strong) IBOutlet UILabel *name1;
@property (nonatomic, retain) NSString *selectedCountry;
@end
4

2 に答える 2

5

例外ブレークポイントを追加します....

上部のタブは次のとおりです。

ここに画像の説明を入力

最後から 2 番目のブレークポイント アイコン 1 を選択する必要があります。それを押して、追加アイコンの下部を見てください。

ここに画像の説明を入力

次に、追加を押して例外ブレークポイントを作成し、次の設定に変更します。

ここに画像の説明を入力

そして、ブレークポイントの例外がここにあります!

ここに画像の説明を入力

次に、アプリを実行すると、クラッシュする行でクラッシュするはずです。クラッシュ ログが表示される場合があり、スキームを GDB に変更する必要がある可能性があります。


アップデート

何らかの種類のクラッシュ ログまたはスタック トレースはありますか? また、スキームをGDBに変更してみてください...方法は次のとおりです。

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

通常、GDB に切り替えるとこれが修正されます。すでにGDB を使用している場合は、LLDB に切り替えて、何が起こるか見てみましょう!

注:あなたが投稿したように、

arg c = (整数) 1

arg v = (文字 **) 0x2fd63cdc

あなたのクラッシュログではありません...


アップデート

これでもうまくいかない場合は、ブレークポイントをあちこちに置いNSLog()てデバッグし、クラッシュした悪いコードの位置を見つけてください。


アップデート

どこでクラッシュしているのかは明らかにわかりませんが、クラッシュしている場所とその理由について微妙な手がかりがあるかもしれません. テーブルビューとに関連していますlistOfItemsviewDidLoad通常、テーブル ビューはデータを再読み込みし、コードが呼び出される直前または同時にデリゲート メソッドとデータ ソース メソッドを呼び出します。したがって、のオブジェクトの初期化と追加を転送して、何が起こるかを確認listOfItemsしてください。viewWillAppear


アップデート

ストーリーボードとインのすべてのアウトレットをチェックし、DetailViewControllerそれらがもう存在しないものに接続されていないことを確認して ください

于 2012-12-25T03:08:47.283 に答える
0

解決策は次のとおりです。セル識別子の名前を確認し、この識別子をセグエに適用します。すべてのセグエには識別子があります.デフォルトは空です..コードに似た名前、特に詳細に移動するセグエを割り当ててみてくださいビューコントローラー。

于 2015-07-14T19:50:28.240 に答える