UITableView crash gives 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [160 nan]'

后端 未结 5 1975
既然无缘
既然无缘 2021-01-31 19:15

I have a custom table view in my app. I have implemented the \"Load More\" feature to the table which loads 25 rows at a time. The problem is after loading 2 times the app crash

5条回答
  •  走了就别回头了
    2021-01-31 20:10

    The stack trace looks like the UITableView is busy layouting the visible cells when the exception occurs. Since the position of a cell seems to be set to a NaN value one has to ask how this can happen.

    Assuming there's no bug in the UITableView layout code, the only way this can happen is that you implement tableView:heightForRowAtIndexPath: in your table view delegate and return a bad height (or one of the according header or footer methods).

    Edit to pinpoint the exact cause of the exception:

    I assume you calculated the height of the cell from the geometric size of a string (using UIStringDrawing's -[NSString sizeWithFont:]). When you send a message to a nil value, the return value usually is nil, 0, NO, or whatever value is represented by an all-bits-zero word.

    For a method that returns a struct (as sizeWithFont:) this is not true. The returned struct is not initialized at all, containing random values for its elements.

    In your case, you probably used one of the uninitialized elements of the CGSize struct, which later turned out not to be a valid IEEE 754 floating point value.

    Addendum: Since clang 3.0 the structs returned from messages are initialized to {0} (all bits zero). So above problem should not happen any more.

提交回复
热议问题