Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

layer is a part of cycle in its layer tree iOS 9 Swift 2

When I load my view controller I'm getting this error:

*** Terminating app due to uncaught exception 'CALayerInvalid', reason: 'layer <CALayer: 0x7fda42c66e30> is a part of cycle in its layer tree'

I don't know why. I think I might've added a third party framework that messed with layers, but I removed it in my troubleshooting. Any insights would be great.

EDIT

It happens during viewDidLoad of my tableViewcontroller. I have a tableView on my second vc. I've narrowed it down to it crashing on setting the heightForRowAtIndexPath on the 4th custom cell. The cell is on a static tableView................. :/ Getting closer!

Here's my heightForRowAtIndexPath:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    
    print("idx = \(indexPath.row)")
    
    return super.tableView(tableView, heightForRowAtIndexPath: indexPath)
}

Pretty generic. Any thoughts on where else this might be caused?

like image 562
Brie Avatar asked Jul 22 '15 03:07

Brie


4 Answers

This might help someone still in trouble with this, For me the issue was this

layer.addSublayer(layer)

Adding a layer to itself 🤦‍♂️ . After this mistake I am planning to kill myself :(.

like image 97
infiniteLoop Avatar answered Nov 17 '22 13:11

infiniteLoop


check if you add self.view in self.view, exemple:

self.view.addSubview(view)

or

contentView.addSubview(self.view)
like image 20
Pablo Ruan Avatar answered Nov 17 '22 15:11

Pablo Ruan


One of my friend was facing the same issue. The root cause was lying in the viewForHeaderInSection delegate of UITableview.

He was adding a label in main view of the controller in this delegate. He was supposed to create a UIView and return it in this delegate but unfortunately he was returning self.view there. So removing this code fixed the issue.

like image 5
Amrit Sidhu Avatar answered Nov 17 '22 15:11

Amrit Sidhu


I had the same error too and found this fix

It mentions to remove the accessoryView Outlet which you will see on the TableView.

To do this:

  1. Click on the Table View
  2. Go to the "Connections Inspector", it's the right window, the very last icon (looks like a circle with an arrow right)
  3. Look for the accessoryView and disconnect the outlet

In the screenshot below, see the outlet you are to disconnect:

enter image description here

like image 18
exo_duz Avatar answered Nov 17 '22 13:11

exo_duz