One of the specifications of my app is that on tapping a tableView cell, the user will be redirected to the website associated with the cell. Here is the code:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if let url = NSURL(string: appdelegate.studentInfo[indexPath.row].url) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
UIApplication.sharedApplication().openURL(url)
}
else {
let alert = UIAlertController(title: "Invalid URL", message: "Cannot open URL because it is invalid.", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Cancel, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
}
}
On my first tap, the URL opens like it is supposed to. However, returning to the app from Safari and touching another cell results in the following error, although the app still works like it is supposed to:
Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.
Is there any way to avoid this error? Or is this a bug?
I have experimented with dispatch_async blocks but it did not solve the problem.
It might not be the same problem as me, but I just solved the same warning in my logs.
I'm showing a UIAlertController
as an actionSheet popover on an iPad, and I had exactly the same warning 8 times in a row every time I tried to show the alert controller.
To make the warning disappear all I had to do was to layout the alert controller view as in the following code:
let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .ActionSheet)
...
alertController.view.layoutIfNeeded() //avoid Snapshotting error
self.presentViewController(alertController, animated: true, completion: nil)
I hope this helps you or any other person having the same warning.
Also using Objective-C, using the suggested [modeAlert.view layoutIfNeeded]
reduced errors to one as above. Final error has been suppressed by changing last addAction from UIAlertActionStyleCancel
to UIAlertActionStyleDefault
as below. Not a great workaround to what appears to be a bug.
[modeAlert addAction:[UIAlertAction
actionWithTitle:NSLocalizedString(@"Cancel", @"")
style:UIAlertActionStyleDefault
handler:nil ]];
To avoid copy/paste from Saliom's answer you can make such subclass and use it instead of UIAlertController
:
class AlertController: UIAlertController {
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.view.layoutIfNeeded()
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With