I have added search bar to my tableview.But when i search some thing in my table view and if i press cancel default button for search bar to dismiss my keyboard means my app getting crash.
Crash report :
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_UIFullscreenPresentationController adaptivePresentationController]: unrecognized selector sent to instance 0x7ff10a88cd80'
*** First throw call stack:
(
0 CoreFoundation 0x000000010b18ed85 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010ca8adeb objc_exception_throw + 48
2 CoreFoundation 0x000000010b197d3d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
3 CoreFoundation 0x000000010b0ddcfa ___forwarding___ + 970
4 CoreFoundation 0x000000010b0dd8a8 _CF_forwarding_prep_0 + 120
5 UIKit 0x000000010dfda4c2 -[UISearchController _searchPresentationController] + 134
6 UIKit 0x000000010db8ad77 -[_UISearchControllerTransplantSearchBarAnimator animateTransition:] + 215
7 UIKit 0x000000010d6f148f __56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 2638
8 UIKit 0x000000010d58ef62 _runAfterCACommitDeferredBlocks + 317
9 UIKit 0x000000010d5a2e4c _cleanUpAfterCAFlushAndRunDeferredBlocks + 95
10 UIKit 0x000000010d5af147 _afterCACommitHandler + 90
11 CoreFoundation 0x000000010b0b3c37 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
12 CoreFoundation 0x000000010b0b3ba7 __CFRunLoopDoObservers + 391
13 CoreFoundation 0x000000010b0a97fb __CFRunLoopRun + 1147
14 CoreFoundation 0x000000010b0a90f8 CFRunLoopRunSpecific + 488
15 GraphicsServices 0x000000010ff92ad2 GSEventRunModal + 161
16 UIKit 0x000000010d582f09 UIApplicationMain + 171
17 Screen 6 0x000000010a791e82 main + 114
18 libdyld.dylib 0x000000010f1c892d start + 1
19 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
Here is my code :
import UIKit
import CoreLocation
class ContainerViewController: UIViewController, CLLocationManagerDelegate, UITableViewDelegate, UITableViewDataSource {
let searchConroller = UISearchController(searchResultsController: nil)
@IBOutlet var TableViewList: UITableView!
// array to store the value from json
var arrDict = [Businessdata]()
var filteredData = [Businessdata]()
var marrFilteredCountryList = [String]()
override func viewDidLoad() {
super.viewDidLoad()
searchConroller.searchBar.hidden = true
searchConroller.searchResultsUpdater = self
searchConroller.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
}
func filterContentForSearch(searchText: String, scope: String = "All")
{
filteredData = arrDict.filter { Businessdata in
return Businessdata.BusinessName!.lowercaseString.containsString(searchText.lowercaseString)
}
TableViewList.reloadData()
}
override func viewDidAppear(animated: Bool)
{
self.LocationLabel.text = "in Toronto, ON"
self.TypeLabel.text = BTdata?.BTNames
self.BTypeId = BTdata?.BTIds
LoadBusinesses()
}
override func viewWillDisappear(animated: Bool)
{
super.viewWillDisappear(animated)
self.navigationController?.navigationBarHidden = false
}
@IBAction func searchPressed(sender: AnyObject)
{
//
if searchConroller.searchBar.hidden
{
searchConroller.searchBar.hidden = false
TableViewList.tableHeaderView = searchConroller.searchBar
//yConstraint.constant = 44;
}
else
{
searchConroller.searchBar.hidden = true
//-searchBar.bounds.height
yConstraint.constant = 0;
}
}
// web services method
func LoadBusinesses()
{
self.arrDict.removeAll()
let token = NSUserDefaults.standardUserDefaults().valueForKey("access_token") as! String
let headers = ["x-access-token": token]
var StringUrl:String = "http://some url”
StringUrl += "?lat=\(self.NewCurrentLatitude)"
StringUrl += "&long=\(self.NewCurrentLongitude)"
let request = NSMutableURLRequest(URL: NSURL(string: StringUrl)!,
cachePolicy: .UseProtocolCachePolicy,
timeoutInterval: 10.0)
request.HTTPMethod = "GET"
request.allHTTPHeaderFields = headers
let session = NSURLSession.sharedSession()
let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
if (error != nil)
{
print(error)
}
else
{
dispatch_async(dispatch_get_main_queue(),{
if let json = (try? NSJSONSerialization.JSONObjectWithData(data!, options: [])) as? NSDictionary
{
let success = json["success"] as? Int
if (success == 1)
{
if let reposArray = json["data"] as? [NSDictionary]
{
for item in reposArray
{
let itemObj = item as? Dictionary<String,AnyObject>
let b_type = itemObj!["business_type"]
// taxis type
if (b_type as? String == self.BTypeId)
{
self.arrDict.append(Businessdata(json:item))
self.TableViewList.reloadData()
}
}
}
}
else
{
let message = json["message"] as? String
print(message)
}
}
else
{
print("Json Data error")
}
})
}
})
dataTask.resume()
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int
{
//
var numOfSection: NSInteger = 0
if arrDict.count > 0
{
self.TableViewList.backgroundView = nil
numOfSection = 1
}
else
{
let noDataLabel: UILabel = UILabel(frame: CGRectMake(0, 0, self.TableViewList.bounds.size.width, self.TableViewList.bounds.size.height))
noDataLabel.text = "No Data Available"
noDataLabel.textColor = UIColor(red: 22.0/255.0, green: 106.0/255.0, blue: 176.0/255.0, alpha: 1.0)
noDataLabel.textAlignment = NSTextAlignment.Center
self.TableViewList.backgroundView = noDataLabel
}
return numOfSection
}
// number of rows
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
ResultCount.text = String(self.arrDict.count)+" Results"
// if searchConroller.active && searchConroller.searchBar.text = "" {
//
// return filteredData.count
// }
if searchConroller.active && searchConroller.searchBar.text! != "" {
return filteredData.count
}
else
{
return self.arrDict.count
}
}
// header view
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
{
let headerView = UIView()
headerView.backgroundColor = UIColor.clearColor()
return headerView
}
// calling each cell based on tap and users ( premium / non premium )
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
if((arrDict[indexPath.row].FeaturedBusiness) != nil)
{
let cell1:premiumUsercell = tableView.dequeueReusableCellWithIdentifier("cell3") as! premiumUsercell
cell1.phoneNumber = arrDict[indexPath.section].ContactNumber!
cell1.vendorName3.text = arrDict[indexPath.section].BusinessName
cell1.vendorAdddress3.text = arrDict[indexPath.section].Address
cell1.VendorRating3.rating = arrDict[indexPath.section].Rating!
cell1.latlng = arrDict[indexPath.section].BusinessLatLng!
latlng = arrDict[indexPath.section].BusinessLatLng!
let FeaturedValues = arrDict[indexPath.row].FeaturedBusiness
cell1.FeaturedDisplayText.text = FeaturedValues!.valueForKey("display_text") as? String
let BImage = arrDict[indexPath.section].StoreImages
let BMainImage = BImage![0] as! NSDictionary
let FinalImage = BMainImage.valueForKey("url") as! String
if let imgURL2 = NSURL(string: FinalImage)
{
let request: NSURLRequest = NSURLRequest(URL: imgURL2)
let session = NSURLSession.sharedSession()
let Imgtask = session.dataTaskWithRequest(request)
{
(data, response, error) -> Void in
if (error == nil && data != nil)
{
func display_image()
{
cell1.vendorImage.image = UIImage(data: data!)
}
dispatch_async(dispatch_get_main_queue(), display_image)
}
}
Imgtask.resume()
}
cell1.getDirectionButton.addTarget(self, action: #selector(ContainerViewController.GetDirection), forControlEvents: UIControlEvents.TouchUpInside)
return cell1
}
if searchConroller.active && searchConroller.searchBar.text! != "" {
let cell:customCell = tableView.dequeueReusableCellWithIdentifier("cell") as! customCell
cell.vendorName.text = filteredData[indexPath.row].BusinessName
cell.vendorAddress.text = filteredData[indexPath.row].Address
cell.VendorRating.rating = filteredData[indexPath.row].Rating!
return cell
}
else
{
let cell:customCell = tableView.dequeueReusableCellWithIdentifier("cell") as! customCell
cell.vendorName.text = arrDict[indexPath.row].BusinessName
cell.vendorAddress.text = arrDict[indexPath.row].Address
cell.VendorRating.rating = arrDict[indexPath.row].Rating!
return cell
}
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc: BusinessDetailViewController = storyboard.instantiateViewControllerWithIdentifier("BusinessDetailViewController") as! BusinessDetailViewController
if searchConroller.active && searchConroller.searchBar.text! != "" {
vc.BusinessData = filteredData[indexPath.row]
}
else {
vc.BusinessData = arrDict[indexPath.row]
}
self.presentViewController(vc, animated: true, completion: nil)
}
}
extension ContainerViewController: UISearchResultsUpdating {
func updateSearchResultsForSearchController(searchController: UISearchController) {
filterContentForSearch(searchConroller.searchBar.text!)
}
}
This is my first project , please help me out.How to solve.
Thanks
Get awesome software, professional instruments and effects and all the musical building blocks you need just €1 your first month. Whether you feel most at home in Pro Tools, Ableton Live, Logic Pro or FL Studio, Reason is the perfect expansion to your favorite DAW.
With one of the strongest engines in the AV industry, Reason continuosly updates and maintains a library of millions of suspected malicious files. Reason's innovative thinking and advanced technology enable comprehensive threat detection and real-time response.
The sounds in Reason are super crisp. Reason’s instruments and effects are intutive to use but also massively flexible and powerful. We use cookies to improve your site experience. By using our websites you consent to this in accordance with the cookie section in our Privacy Policy.
All updates are included in Reason+ to keep you sounding fresh! Sound Packs are music-making building blocks to inspire you and speed up your creative process. Every week we release new Sound Packs by world-class sound designers. Imagine the simplicity of samples but with added flexibility and creative possibilities.
This can happen if the button being tapped attempts to modally present a new view controller. Since a UISearchController is already being presented, this can cause unexpected behavior or raise an exception.
If there is any code in your button action that is triggering a segue, try changing the type of segue to Show. If you're using interface builder, this would be the Kind property in the attributes inspector.
you can try set definesPresentationContext to true in ContainerViewController
definesPresentationContext = true
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