Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 纳契弗。从plist加载自定义对象数组_Ios_Objective C_Plist - Fatal编程技术网

Ios 纳契弗。从plist加载自定义对象数组

Ios 纳契弗。从plist加载自定义对象数组,ios,objective-c,plist,Ios,Objective C,Plist,我正在尝试加载.plist文件 进入我的cusom对象数组,称为属性。这里是属性。h: #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface Property : NSObject<NSCoding> { int price_base; float state; float infrastructure; } -(id)initWithCoder:(

我正在尝试加载.plist文件

进入我的cusom对象数组,称为属性。这里是属性。h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface Property : NSObject<NSCoding> {
    int price_base;
    float state;
    float infrastructure;
}

-(id)initWithCoder:(NSCoder *)decoder;
-(void)encodeWithCoder:(NSCoder *)aCoder;
@end
#import "Property.h"

@implementation Property
-(void)encodeWithCoder:(NSCoder *)aCoder 
{/*No need to encode yet*/}
-(id)initWithCoder:(NSCoder *)decoder {
    if (self = [super init]) {

        price_base = [decoder decodeIntForKey:@"price_base"];
        state = [decoder decodeFloatForKey:@"state"];
        infrastructure = [decoder decodeFloatForKey:@"infrastructure"];
    }
    return self;
}
@end
下一步是执行尝试加载对象的代码:

-(void)loadProperty
{
    NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"Property" ofType:@"plist"];
    NSMutableArray *propertyArray = [[NSMutableArray alloc] init];
    propertyArray = [[NSKeyedUnarchiver unarchiveObjectWithFile:resourcePath] mutableCopy];
}
在运行时,有一个异常会删除下一个:

[\uu\NSCFArray objectForKey:]:发送到实例的选择器无法识别 0x7F99E5102C0 2015-04-30 17:40:52.616房地产[5838:2092569]*** 由于未捕获异常而终止应用程序 “NSInvalidArgumentException”,原因:”-[\uu NSCFArray objectForKey:]: 已将无法识别的选择器发送到实例0x7F99E5102C0'


有人知道代码有什么问题吗?我对XCode和ObjectiveC还比较陌生,所以非常感谢您的帮助

您混淆了归档和序列化

NSString *resourcePath = 
    [[NSBundle mainBundle] pathForResource:@"Property" ofType:@"plist"];
NSMutableArray *propertyArray = [[NSMutableArray alloc] init];
propertyArray = 
    [[NSKeyedUnarchiver unarchiveObjectWithFile:resourcePath] mutableCopy];
这不是读取.plist文件的方式。它不是存档的,您也不需要非存档者来阅读它。它是一个数组,所以只需将其直接读入NSArray(
initWithContentsOfFile:


结果,一切都是不可变的。如果这不是您想要的,那么您需要NSPropertyListSerialization类来帮助您。

是的,似乎我对归档和序列化很困惑。因此,我对代码进行了如下修改:

-(void)loadProperty
{
    NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"Property" ofType:@"plist"];
    NSArray *temp = [[NSArray alloc] initWithContentsOfFile:resourcePath];
    NSMutableArray *propertyArray = [[NSMutableArray alloc] init];
    for(NSDictionary *dict in temp) {
        Property *prop = [Property alloc];
        prop.price_base = (int)[[dict valueForKey:@"price_base"] integerValue];
        prop.state = [[dict valueForKey:@"state"] floatValue];
        prop.infrastructure = [[dict valueForKey:@"infrastructure"] floatValue];

        [propertyArray addObject:prop];
    }
}

而且看起来效果不错。谢谢

为什么需要使用键控的无归档器
NSMutableDictionary
已包含要读取/写入
.plist
文件的代码。