我正在尝试将indexPath
中要删除的行UITableView
保存到NSUSerDefaults
。
但我得到以下异常:
Attempt to insert non-property value '<NSIndexPath 0x834cc00> 2 indexes [0,1]
如何解决此问题并将数据保存到用户默认设置以便以其他方式访问它?
答案 0 :(得分:5)
您可以将其保存为两个浮点值,然后重新创建NSIndexPath:
分别保存indexPath.row
和indexPath.column
,然后使用以下内容重新创建:
[NSIndexPath indexPathForRow:inSection:]
答案 1 :(得分:2)
将类别添加到NSIndexPath
。这增加了两种允许转换为NSArray
的方法。然后,您可以将其保存为默认值。
@implementation NSIndexPath ( ArrayRepresentation )
-(NSArray*)arrayRepresentation
{
NSMutableArray * result = [ NSMutableArray arrayWithCapacity:self.length ] ;
for( int index=0, count = self.length; index < count; ++index )
{
[ result addObject:[ NSNumber numberWithUnsignedInteger:[ self indexAtPosition:index ] ] ] ;
}
return result ;
}
+(NSIndexPath*)indexPathWithArrayRepresentation:(NSArray*)array
{
if ( array.count == 0 ) { return nil ; }
// if array has too many items this will crash your app be careful
NSUInteger indexes[ array.count ] ;
for( int index=0, count = array.count; index < count; ++index )
{
indexes[ index ] = [ [ array objectAtIndex:index ] unsignedIntegerValue ] ;
}
return [ NSIndexPath indexPathWithIndexes:indexes length:array.count ] ;
}
@end
我没有测试过,可能需要调试......
答案 2 :(得分:0)
您可以只向NSUserDefaults保存数组,字符串,数字,而不是NSIndexPath,因此您应该创建一个将NSIndexPath转换为数组的方法,然后将其保存到NSUserDefaults。