Found! If this AlertController is presented inside a popover, it must provide location information, either sourceView, and sourceRect, or barButtonItem.
how
resetWarning.popoverPresentationController?.sourceView = selectedCell?.contentView resetWarning.popoverPresentationController?.sourceRect = selectedCell!.contentView.frame
My code should have looked like this:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { var previouslySelectedCell: UITableViewCell? if checkedIndexPath != nil { previouslySelectedCell = tableView.cellForRowAtIndexPath(checkedIndexPath) } var selectedCell = tableView.cellForRowAtIndexPath(indexPath) let selectedCurrency = PortfolioCurrencyStore.sharedStore.allCurrencies[indexPath.row] if selectedCurrency.symbol != GlobalSettings.sharedStore.portfolioCurrency { // Warning : changing the portfolio currency will reset the portfolio var resetWarning = UIAlertController(title: NSLocalizedString("Currency Picker VC:AS title", comment: "Changing currency will reset portfolio"), message: nil, preferredStyle: .ActionSheet) // destructive button let resetAction = UIAlertAction(title: NSLocalizedString("Currency Picker VC:AS destructive", comment: "Destructive button title"), style: .Destructive, handler: { (action: UIAlertAction!) in // Remove checkmark from the previously marked cell previouslySelectedCell?.accessoryType = .None // Add checkmark to the selected cell selectedCell?.accessoryType = .Checkmark self.checkedIndexPath = indexPath // Animate deselection of cell self.tableView.deselectRowAtIndexPath(indexPath, animated:true) // Stock the portfolio currency as NSUserDefaults GlobalSettings.sharedStore.portfolioCurrency = selectedCurrency.symbol // link between portfolioCurrency as a String and currency.symbol as the property of a Currency instance. // Delete all items from the StockStore StockStore.sharedStore.removeAllStocks() println("StockStore : all entries were deleted") // Delete all items from the CurrencyRateStore CurrencyRateStore.sharedStore.deleteAllRates() println("CurrencyStore : all entries were deleted") // Delete all items from the SalesJournal SalesJournal.sharedStore.removeAllEntries() println("SalesJournal : all Sales journal entries were deleted") // Reload tableView self.tableView.reloadData() // On Regular sizes, the currency picker is presented inside a popover : reloadData of the List View NSNotificationCenter.defaultCenter().postNotificationName("CurrencyPickerVC_PortfolioCurrencyDidChangeNotification", object:nil, userInfo:nil) // Animate deselection of cell tableView.deselectRowAtIndexPath(indexPath, animated:true) // Return to root VC self.navigationController?.popToRootViewControllerAnimated(true) }) // cancel button let cancelAction = UIAlertAction(title: NSLocalizedString("Currency Picker VC:AS cancel", comment: "Cancel button title"), style: .Cancel, handler: { (alertAction: UIAlertAction!) -> Void in // Animate deselection of cell self.tableView.deselectRowAtIndexPath(indexPath, animated:true) }) resetWarning.addAction(resetAction) resetWarning.addAction(cancelAction) // If this AlertController is presented inside a popover, it must provide the location information, either a sourceView and sourceRect or a barButtonItem. resetWarning.popoverPresentationController?.sourceView = selectedCell?.contentView resetWarning.popoverPresentationController?.sourceRect = selectedCell!.contentView.frame presentViewController(resetWarning, animated: true, completion: nil) } else { // Animate deselection of cell tableView.deselectRowAtIndexPath(indexPath, animated:true) } }
Now the image looks like this: 
source share