I am using a neat table view controller called SKSTableView in my project which allows each table row to have a number of sub rows. This code works perfectly in 32bit mode but when I run it on my iPhone 5S or in the Simulator in 4-inch 64bit mode, when you tap on a row to get the sub rows it crashes. I do not have any knowledge of the differences of 64bit and 32bit iOS systems. I would love to understand what it happening here.
You will notice that the *SubRowObjectKey is set to void- the error I get is:
EXC_BAD_ACCESS_(code=EXC_I386_GPFLT)
Which is a general protection fault trying to access something that is not there(?)
When it crashes Xcode highlights this line of code:objc_setAssociatedObject(self, SubRowObjectKey, subRowObj, OBJC_ASSOCIATION_ASSIGN);
Also there is this: Printing description of *(subRowObj): (id) [0] = Printing description of SubRowObjectKey:
It seems to be working great in 32bit mode but some how in 64bit it seems to loose where it is. Here below is the section of the code I am looking at.
#pragma mark - NSIndexPath (SKSTableView) static void *SubRowObjectKey; @implementation NSIndexPath (SKSTableView) @dynamic subRow; - (NSInteger)subRow { id subRowObj = objc_getAssociatedObject(self, SubRowObjectKey); return [subRowObj integerValue]; } - (void)setSubRow:(NSInteger)subRow { if (IsEmpty(@(subRow))) { return; } id subRowObj = @(subRow); objc_setAssociatedObject(self, SubRowObjectKey, subRowObj, OBJC_ASSOCIATION_ASSIGN); } + (NSIndexPath *)indexPathForSubRow:(NSInteger)subrow inRow:(NSInteger)row inSection:(NSInteger)section { NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section]; indexPath.subRow = subrow; return indexPath; }
You can download and play with the code here: https://github.com/sakkaras/SKSTableView