編集
わかりました、私はそれを理解したと思います。
私の全体的な操作の流れは次のとおりです。
-(void)submitRegistration
{
//[[AppDelegate sharedDelegate] drupalLogin];
[self validateFields];
if(fieldsValid)
{
[self createBike];
// save member node will save bike node too if successful
// bike node will not be saved if member node did not save successful
[self saveMemberNode];
// save the updated member node and bike node to Core Data
[self saveLocalRegistration];
// *** ABOVE LINE GETS EXECUTED BEFORE ASYNC REQUEST FINISHES ***
}
}
私の「[self saveLocalRegistration];」非同期リクエスト「ブロック」の実行が完了する前にコードが実行されたため、クラッシュが発生しました。
「saveLocalRegistration」メソッドは [managedObjectContext save:&error]; を呼び出します。
元の質問
Core Data に初めて飛び込みました。
私のアプリでやろうとしていることの 1 つは、データを Drupal サーバーに送信することです。
問題を次のように絞り込みました。
// *** *** ***
// doesn't crash here
// *** *** ***
NSLog(@"bike.brand = %@", bike.brand);
NSLog(@"bike.model = %@", bike.model);
NSLog(@"bike.features = %@", bike.features);
// save new member node to Drupal
[DIOSNode nodeSave:memberData success:^(AFHTTPRequestOperation *operation, id responseObject)
{
NSLog(@"Node saved!");
NSDictionary *serverNodeData = (NSDictionary *)responseObject;
NSLog(@"Server node details = %@", serverNodeData);
// set the member's memberId to the newly created Drupal member node's nodeId
member.memberId = [NSNumber numberWithLong:[[serverNodeData valueForKey:@"nid"] longLongValue]];
// *** *** ***
// accessing bike properties here inside this objective c "Block" crashes app
// somehow the above line "member.memberId = .... " doesn't crash despite both being Core Data entities
// *** *** ***
NSLog(@"bike.brand = %@", bike.brand); // <--- CRASH HERE ***
NSLog(@"bike.model = %@", bike.model);
NSLog(@"bike.features = %@", bike.features);
//bike.ownerId = member.memberId;
// save bike node with member id
[self saveBikeNode];
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
NSLog(@"Failed to save node, error: %@", [error localizedDescription]);
}];
上記のソース コードからわかるように、NSLogs の最初のブロックはアプリをクラッシュさせませんが、目標 c "Block" 内で、NSLogs の同じブロックがアプリをクラッシュさせます。
注: "[DIOSNode nodeSave:memberData success:...." Objective C ブロックは非同期要求だと思います。これがマルチスレッドの問題であるかどうかはわかりません。
bike.brand、bike.model、bike.features は「文字列」データ型です。