Objective - C 调用变量不工作
Objective - C calling variable not working
我在这里定义了这个变量:
const SDataGridCoord *clickedGridCoord;
我用这种方法填充它:
- (void)shinobiDataGrid:(ShinobiDataGrid *)grid willSelectCellAtCoordinate:(const SDataGridCoord *)gridCoordinate
{
if ((gridCoordinate.column.displayIndex==5||gridCoordinate.column.displayIndex == 6 || gridCoordinate.column.displayIndex == 7 ) && dataSource.dataForDatabase)
{
clickedGridCoord = gridCoordinate;
[self CreateCellDateModPopup:gridCoordinate];
}
}
我使用了一个断点并看到它被填充了。
但是当我调用它时,它是空的:
CellData *cell = [dataSource.cellHolder objectAtIndex:clickedGridCoord.row];
空的意思是没有行或列,但是当我第一次填充 SDataGridCoord 时有。
我做错了什么,没有其他东西覆盖变量。
我试过这个:
SDataGridCoord *clickedGridCoord;
然后
- (void)shinobiDataGrid:(ShinobiDataGrid *)grid willSelectCellAtCoordinate:(const SDataGridCoord *)gridCoordinate
{
if ((gridCoordinate.column.displayIndex==5||gridCoordinate.column.displayIndex == 6 || gridCoordinate.column.displayIndex == 7 ) && dataSource.dataForDatabase)
{
clickedGridCoord = (SDataGridCoord *)gridCoordinate;
[self CreateCellDateModPopup:gridCoordinate];
}
}
仍然是相同的结果,我的应用程序仍然崩溃:Thread 1:EXC_BAD_ACCESS (code = 1, address=0xc000000c)
我的 .m 文件:
@interface Controller()
{
SDataGridCoord *clickedGridCoord;
}
@implementation Controller
- (void)shinobiDataGrid:(ShinobiDataGrid *)grid willSelectCellAtCoordinate:(const SDataGridCoord *)gridCoordinate
{
if ((gridCoordinate.column.displayIndex==5||gridCoordinate.column.displayIndex == 6 || gridCoordinate.column.displayIndex == 7 ) && dataSource.dataForDatabase)
{
clickedGridCoord = (SDataGridCoord *)gridCoordinate;
[self CreateCellDateModPopup:clickedGridCoord];
}
}
- (void)ChangeCellWithStringDate :(NSString *)stringDate
{
//My app crashes here with this error: Thread 1:EXC_BAD_ACCESS (code = 1, address=0xc000000c)
CellData *cell = [dataSource.cellHolder objectAtIndex:clickedGridCoord.row.rowIndex];
}
尝试将您的变量添加到 .m 的界面
@interface YOUR_OBJECT ()
{
SDataGridCoord *_clickedGridCoord;
}
@end
您在使用一些 ARC 之前的库吗?如果是这样,我怀疑有人(我指的是某些代码)再次手动释放 gridCoordinate.
引用的对象
这会导致对象被释放,您最终会引用错误的内存位置(因为对象已不存在)。
如果你有SDataGridCoord的源代码,请在dealloc方法中添加一个断点,并在你尝试使用
中的对象之前查看它是否被调用
- (void)ChangeCellWithStringDate :(NSString *)stringDate
最后,如果发生这种情况,您应该创建另一个 SDataGridCoord 对象(一个只属于您的副本)并将其分配给您的 ivar。它将由ARC管理,一切都会好起来的。
我在这里定义了这个变量:
const SDataGridCoord *clickedGridCoord;
我用这种方法填充它:
- (void)shinobiDataGrid:(ShinobiDataGrid *)grid willSelectCellAtCoordinate:(const SDataGridCoord *)gridCoordinate
{
if ((gridCoordinate.column.displayIndex==5||gridCoordinate.column.displayIndex == 6 || gridCoordinate.column.displayIndex == 7 ) && dataSource.dataForDatabase)
{
clickedGridCoord = gridCoordinate;
[self CreateCellDateModPopup:gridCoordinate];
}
}
我使用了一个断点并看到它被填充了。
但是当我调用它时,它是空的:
CellData *cell = [dataSource.cellHolder objectAtIndex:clickedGridCoord.row];
空的意思是没有行或列,但是当我第一次填充 SDataGridCoord 时有。
我做错了什么,没有其他东西覆盖变量。
我试过这个:
SDataGridCoord *clickedGridCoord;
然后
- (void)shinobiDataGrid:(ShinobiDataGrid *)grid willSelectCellAtCoordinate:(const SDataGridCoord *)gridCoordinate
{
if ((gridCoordinate.column.displayIndex==5||gridCoordinate.column.displayIndex == 6 || gridCoordinate.column.displayIndex == 7 ) && dataSource.dataForDatabase)
{
clickedGridCoord = (SDataGridCoord *)gridCoordinate;
[self CreateCellDateModPopup:gridCoordinate];
}
}
仍然是相同的结果,我的应用程序仍然崩溃:Thread 1:EXC_BAD_ACCESS (code = 1, address=0xc000000c)
我的 .m 文件:
@interface Controller()
{
SDataGridCoord *clickedGridCoord;
}
@implementation Controller
- (void)shinobiDataGrid:(ShinobiDataGrid *)grid willSelectCellAtCoordinate:(const SDataGridCoord *)gridCoordinate
{
if ((gridCoordinate.column.displayIndex==5||gridCoordinate.column.displayIndex == 6 || gridCoordinate.column.displayIndex == 7 ) && dataSource.dataForDatabase)
{
clickedGridCoord = (SDataGridCoord *)gridCoordinate;
[self CreateCellDateModPopup:clickedGridCoord];
}
}
- (void)ChangeCellWithStringDate :(NSString *)stringDate
{
//My app crashes here with this error: Thread 1:EXC_BAD_ACCESS (code = 1, address=0xc000000c)
CellData *cell = [dataSource.cellHolder objectAtIndex:clickedGridCoord.row.rowIndex];
}
尝试将您的变量添加到 .m 的界面
@interface YOUR_OBJECT ()
{
SDataGridCoord *_clickedGridCoord;
}
@end
您在使用一些 ARC 之前的库吗?如果是这样,我怀疑有人(我指的是某些代码)再次手动释放 gridCoordinate.
引用的对象这会导致对象被释放,您最终会引用错误的内存位置(因为对象已不存在)。
如果你有SDataGridCoord的源代码,请在dealloc方法中添加一个断点,并在你尝试使用
中的对象之前查看它是否被调用- (void)ChangeCellWithStringDate :(NSString *)stringDate
最后,如果发生这种情况,您应该创建另一个 SDataGridCoord 对象(一个只属于您的副本)并将其分配给您的 ivar。它将由ARC管理,一切都会好起来的。