我需要从NSMutableArray中选择字符串值,然后将其保存到plist中。我建立了一个NSMutableArray来在表View中显示信息。允许的最大索引为8。(例如,仅粘贴两个)
如果字符串不存在,则会出现以下错误:
sDict是用于将数据保存到属性列表文件的字典。
编码:
- (IBAction)save:(id)sender {
(...)
NSString *One;
NSString *Two;
...etc
if ([self.smOne objectAtIndex:0])
One = [self.smOne objectAtIndex:0];
if ([self.smOne objectAtIndex:1])
Two = [self.smOne objectAtIndex:1];
...etc
if (One)
[sDict setObject:[self.smTwo objectAtIndex:0]
forKey:[UserM stringByAppendingString:One]];
[sDict setObject:[self.smThree objectAtIndex:0]
forKey:[UserS stringByAppendingString:One]];
[sDict setObject:[self.smFour objectAtIndex:0]
forKey:[UserP stringByAppendingString:One]];
if (Two)
[sDict setObject:[self.smTwo objectAtIndex:1]
forKey:[UserM stringByAppendingString:Two]];
[sDict setObject:[self.smThree objectAtIndex:1]
forKey:[UserS stringByAppendingString:Two]];
[sDict setObject:[self.smFour objectAtIndex:1]
forKey:[UserParM stringByAppendingString:Two]];
...etc
}
如果存在所有对象,则此代码有效,但如果缺少索引中的对象之一,则此代码将失败。
我真的不知道如何正确检查对象是否存在,因为上面的代码似乎无法正常工作。
我已经尝试过[self.smOne count],但是作为Int或String传递条件的问题。
感谢您的回答。
最佳答案
看起来您正在从索引1到8明确检查smOne。但是您还提到数组最多可以有8个。因此,如果缺少该数组,例如6、7和8,您仍然会调用[smOne objectAtIndex:6]
,这将导致引发NSRangeException,因为6超出了数组的范围。
试试这个代替:
int i = 0;
for ( NSString *aString in self.smOne )
{
[sDict setObject:[self.smTwo objectAtIndex:i]
forKey:[UserM stringByAppendingSting:aString]];
[sDict setObject:[self.smThree objectAtIndex:i]
forKey:[UserS stringByAppendingString:aString]];
[sDict setObject:[self.smFour objectAtIndex:i]
forKey:[UserP stringByAppendingString:aString]];
i++;
}
它将遍历smOne数组中的每个对象,并将该对象添加到sDict中,而不管smOne中有多少个项目。
另外,请注意如何生成密钥。 [UserM stringByAppendingSting:aString]可能不会总是唯一的。
关于objective-c - 使用NSArray中包含的字符串数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1566847/