我有一个步进器,在其值更改期间,我需要将值存储在plist中。

因此,根据saveAppPlist方法,我需要将NSMutableDictionary与更改后的文件-> dictData一起传递

NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:dictData format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];
if(plistData)
{
    [plistData writeToFile:plistPath atomically:YES];
}


这是步进的方法:

-(void)changeItemQuantityAtRow:(int)row
                       toValue:(double)value
{
    NSMutableDictionary *item = [[items objectAtIndex:row] mutableCopy];
    [item setObject:[NSNumber numberWithDouble:value] forKey:@"Quantity"];
    [items setObject:item atIndexedSubscript:row];
    NSLog(@"%@", items);
    NSMutableDictionary *plistDict = [NSDictionary dictionaryWithObjects:items forKeys:[NSArray arrayWithObjects:@"Name", @"Price", @"Quantity", nil]];
    NSLog(@"%@", plistDict);
    [self saveAppPlist:plistDict];
}


plist看起来像这样(这只是4个项目之一):

<dict>
    <key>Items</key>
    <array>
        <dict>
            <key>Name</key>
            <string>The zero item</string>
            <key>Price</key>
            <integer>133</integer>
            <key>Quantity</key>
            <integer>17</integer>
        </dict>


步进器正在更改项目的数量。但是当我尝试更改数量的值时出现这样的错误:

'NSInvalidArgumentException', reason: '*** -[NSDictionary initWithObjects:forKeys:]: count of objects (4) differs from count of keys (3)'


我了解错误的根源,但不知道如何解决此问题。谁能帮我?还有一个-每次敲击步进器后存储值可能不是很好吗?

最佳答案

忘记要存储数组,将对象视为id实例。当您想用键id items存储@"Items"时,您要使用的是

//[NSDictionary dictionaryWithObject:<#(id)#> forKey:<#(id<NSCopying>)#>]
NSMutableDictionary *plistDict = [NSDictionary dictionaryWithObject:items forKey:@"Items"];

关于ios - 在plist文件中存储值期间出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15741115/

10-14 23:42
查看更多