【发布时间】:2014-02-28 22:29:44
【问题描述】:
我在我的项目中使用了一个名为 SKSTableView 的简洁表格视图控制器,它允许每个表格行有多个子行。此代码在 32bit 模式下完美运行,但是当我在 iPhone 5S 或 4 英寸 64 位模式下的模拟器中运行它时,当您点击一行以获取子行时,它会崩溃。我对 64 位和 32 位 iOS 系统的区别一无所知。我很想知道这里发生了什么。
您会注意到 *SubRowObjectKey 设置为 void - 我得到的错误是:
EXC_BAD_ACCESS_(代码=EXC_I386_GPFLT)
什么是试图访问不存在的东西的一般保护错误(?)
当它崩溃时,Xcode 会高亮显示这行代码:objc_setAssociatedObject(self, SubRowObjectKey, subRowObj, OBJC_ASSOCIATION_ASSIGN);
还有这个: *(subRowObj) 的打印说明: (id) [0] = SubRowObjectKey 的打印说明:
它似乎在 32 位模式下工作得很好,但在 64 位模式下它似乎松散了。下面是我正在查看的代码部分。
#pragma mark - NSIndexPath (SKSTableView)
静态无效*SubRowObjectKey;
@implementation NSIndexPath (SKSTableView)
@动态子行;
- (NSInteger)subRow
{
id subRowObj = objc_getAssociatedObject(self, SubRowObjectKey);
返回 [subRowObj integerValue];
}
- (void)setSubRow:(NSInteger)subRow
{
if (IsEmpty(@(subRow))) {
返回;
}
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 = 子行;
返回索引路径;
}
你可以在这里下载和玩代码:https://github.com/sakkaras/SKSTableView
【问题讨论】:
标签: ios objective-c 64-bit 32-bit general-protection-fault