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