У меня есть UITableViewController
, что у меня есть данные. Если вы нажмете на строку, вы сможете отредактировать существующие данные, если вы нажмете + в UIBarButtonItem
, вы добавите новую информацию. Когда мой Segue передает Core Data Object (vc.managedObjectID), мой контроллер представления "detail" проверяет, есть ли данные в поле 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 пуст), когда я нажимаю, чтобы просмотреть существующие данные, он возвращает правильный данные. Как проверить, является ли playerInfomation пустым (новая запись) или имеет данные (существующие данные) в Swift?
func refreshInterface(){
if managedObjectID != nil {
var playerInformation = managedObjectContext?.existingObjectWithID(managedObjectID!, error: nil) as? PlayerInformation
var firstName = playerInformation!.firstName //EXC_BAD_ACCESS
println("firstName \(firstName)")
}
}
prepareForSegue
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
}