私UITableViewController
はデータを持っています。行をタップすると既存のデータを編集でき、 の + をタップUIBarButtonItem
すると新しい情報を追加できます。Segue がコア データ オブジェクト(vc.managedObjectID) を渡すと、「詳細」View Controller が firstName フィールドにデータがあるかどうかを確認します。
Objective-Cでは、このようなことをします
- (void)refreshInterface
{
CoreDataHelper *cdh = [CoreDataHelper sharedHelper];
Cues *existingCues = (Cues*)[cdh.context existingObjectWithID:_cuesNSManagedObjectID error:nil];
if (!existingCues.cuesName)
{
_cueNameTextField.text = nil;
self.cueDescriptionTextView.text = nil;
}
else
{
_cueNameTextField.text = existingCues.cuesName;
self.cueDescriptionTextView.text = existingCues.cuesDescription;
}
}
firstName にデータがあるかどうかを確認するのに問題があります: var firstName = playerInformation.firstName は、新しいオブジェクトを追加するときにのみ EXC_BAD_ACCESS を引き起こします (playerInformatin が空であることを意味します)。タップして既存のデータを表示すると、正しいデータが返されます。データ。Swift で playerInfomation が空 (新しいレコード) かデータ (既存のデータ) があるかどうかを確認するにはどうすればよいですか?
func refreshInterface(){
if managedObjectID != nil {
var playerInformation = managedObjectContext?.existingObjectWithID(managedObjectID!, error: nil) as? PlayerInformation
var firstName = playerInformation!.firstName //EXC_BAD_ACCESS
println("firstName \(firstName)")
}
}
セグエの準備
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "addPlayerInformationDetail" {
println("addPlayerInformationDetail")
let context = self.fetchedResultsController.managedObjectContext
let entity = self.fetchedResultsController.fetchRequest.entity
let playerInformation = NSEntityDescription.insertNewObjectForEntityForName(entity.name, inManagedObjectContext: managedObjectContext!) as PlayerInformation?
var vc = segue.destinationViewController as PlayerInformationDetailTableViewController
vc.managedObjectID = playerInformation?.objectID
} else if segue.identifier == "editPlayerInformationDetail" {
println("editPlayerInformationDetail")
var indexPath:NSIndexPath = tableView.indexPathForSelectedRow()!
var vc = segue.destinationViewController as PlayerInformationDetailTableViewController
vc.managedObjectID = self.fetchedResultsController.objectAtIndexPath(indexPath).objectID
}