0

私の iOS アプリは、いくつかのテーブルビューを経由して、辞書ベースのプロファイル クラスにデータを追加します。ユーザーがプロファイルを終了すると、次のログインでプロファイルの構築 (およびそれらのテーブルビュー) をスキップできますが、選択した場合は、プロファイルを再構築できます。セグエを使用して、プロファイル クラスを順を追って渡します。再構築すると、アプリは最初に戻ります。問題: 再構築時に、プロファイルが最初のテーブルビュー (国籍) に渡されると消えます。コードの一部を次に示します。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    NSMutableArray *sendArray = [[NSMutableArray alloc] initWithObjects:user0, nil];
NSLog(@"send array = %@", sendArray );
    if( buildPf ) {     //  to Nationality VC
        if ([[segue identifier] isEqualToString:@"getNationality"]) {
            Nationality_TableVC *vc = [segue destinationViewController];
            vc.profiles0 = sendArray;
        }
    } else {        //  to Profile VC
        if( [[segue identifier] isEqualToString:@"directToProfile"] ) {
            YourProfile_VC *vc = [segue destinationViewController];
            vc.profiles10 = sendArray;
            [vc setPushID:[user0.userID integerValue]];
            [vc setPushedPf:profileSum];
        }
    }
}

Nationality_VC では、.h:

@property (強力、非アトミック) NSMutableArray *profiles0;

.m で:

@implementation Nationality_TableVC {
    NSUInteger  selectedIndex;
    NSUInteger  selectedRow;
    Profile     *user0;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    user0 = [[Profile alloc] init];
    user0 = [self.profiles0 objectAtIndex:0];
    NSLog(@"(Nationality) user0 is %@", user0);
    selectedRow = -1;
    [self makeTableIndex];
}

デバッグを通じて、ジャンプバック後にクラスが適切に設定されていることがわかります。sendArray は常に正しいです。最初のビルド中に機能したのと同じセグエを通じて、プロファイルは消えます。なんで?アプリがクラッシュします。Nationality テーブルビューには、NSLog があります。初期ビルド中のメッセージは次のとおりです。

(Nationality) user0 is <Profile: 0x7152330>

再構築中のメッセージは次のとおりです。

(Nationality) user0 is (null)

もちろん、国籍の選択を (null) プロファイルに追加しようとすると、クラッシュが発生します。ユーザーが再構築を選択した後で気が変わった場合は、ここでも完成したプロファイルに直接ジャンプできます。存在する場合、セグエはプロファイル クラスを正しく渡します。問題ない。失踪の原因は何ですか?

4

1 に答える 1

0

友達のノップがまた助けてくれました。彼のデバッグ スキルは私よりもはるかに優れています。彼は、buildPf bool が実際に私の prepareForSegue を Nationality_TableVC にブロックしていることを示しました。セグエが呼び出されたとき、それは準備をスキップしました。実際、prepareForSegue ではbuildPf条件はまったく必要ありません。このばかげた間違いで何時間も無駄にしました。

于 2012-11-29T23:56:44.037 に答える