iPhone-使用NSUserDefaults注册包含NSNulls的数组

iPhone-使用NSUserDefaults注册包含NSNulls的数组,iphone,Iphone,我在下面定义了数组 NSMutableArray *tempMPArray = [NSMutableArray arrayWithCapacity:16]; for (int i=0; i < chapters; i++) { [tempMPArray addObject:[NSNull null]]; } 如果我将数组中的对象替换为任何其他对象NSNumber等,则效果良好。如果我的数组被NSUserDefaults拒绝,那么我做错了什么?堆栈跟踪或NSZombie不提供任何

我在下面定义了数组

NSMutableArray *tempMPArray = [NSMutableArray arrayWithCapacity:16];
for (int i=0; i < chapters; i++) 
{

   [tempMPArray addObject:[NSNull null]];
}

如果我将数组中的对象替换为任何其他对象NSNumber等,则效果良好。如果我的数组被NSUserDefaults拒绝,那么我做错了什么?堆栈跟踪或NSZombie不提供任何其他信息

这里有一个更好的解决方案

在@implementation之后定义静态

NSString *const Null = @"";
然后

NSMutableArray*tempDSArray=[NSMutableArray阵列容量:16];
对于(i=0;i<章节;i++)
{
[tempdsrayaddobject:Null];
}

其他一切都应该很好

虽然解决方案可能是一种“变通办法”,但我认为它并没有回答根本的问题。通过为字典提供[NSNull null]值,他为NSUserDefaults提供了有效的字典。为什么它会崩溃?是他做错了什么,还是注册表默认中的一个bug

在某些情况下,了解用户是否输入了值(即存在有效字符串)或未输入值(null)是很重要的,创建“有效但空字符串”的方法无法确定空字符串是因为用户创建了一个没有字符的字符串,还是他从未创建过字符串。在这两种情况下,您可能需要不同的逻辑

我也有同样的想法,我有一个NSUserDefault值,我希望是[NSNull null],我读到的所有东西都表明,在字典中输入null值的“正确”方法是使用[NSNull null],我的字典创建得很好。但是使用此有效字典的registerDefaults会导致崩溃。这表明registerDefaults的实现中存在一个bug,不是吗?以下内容有什么问题,为什么会崩溃

NSArray *defaultValues = [NSArray arrayWithObjects:[NSNull null], nil];
NSArray *CurrentKeys = [NSArray arrayWithObjects: @"NullKey", nil];
NSDictionary *resourceDict = [NSDictionary dictionaryWithObjects:defaultValues forKeys:CurrentKeys];
[[NSUserDefaults standardUserDefaults] registerDefaults:resourceDict];

最终,我认为答案是userDefaults被写成plist,而plist不支持NSNull。如果是这样的话,registerDefaults的文档应该说字典中只允许plist对象类型

需要更多信息,如何定义myDict?谢谢,heere是我的字典def:NSDictionary*myDictionary=[NSDictionary dictionary WithObjectsAndKeys:tempDSArray,kSecKey,tempMPArray,kChapKey,nil];[[NSUserDefaults standardUserDefaults]registerDefaults:myDict];[[NSUserDefaults standardUserDefaults]同步];乔丹,谢谢你救了我。我的想法没有跳出框框,而是墨守成规。
NSMutableArray *tempDSArray = [NSMutableArray arrayWithCapacity:16];
 for (i=0; i < chapters; i++) 
 {

  [tempDSArray addObject:Null];
 }
NSArray *defaultValues = [NSArray arrayWithObjects:[NSNull null], nil];
NSArray *CurrentKeys = [NSArray arrayWithObjects: @"NullKey", nil];
NSDictionary *resourceDict = [NSDictionary dictionaryWithObjects:defaultValues forKeys:CurrentKeys];
[[NSUserDefaults standardUserDefaults] registerDefaults:resourceDict];