NSMutableDictionary不适用于空洞和IBActions

时间:2013-05-28 23:26:47

标签: iphone xcode nsdictionary

我在主viewController的NSMutableDictionary文件中创建了一个名为*temp的{​​{1}},并添加了此代码以从我的.h文件中提取信息。

.plist

在同一视图控制器中,我添加了一个按钮操作并添加了以下代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];
    temp=[NSMutableDictionary dictionaryWithContentsOfFile:path];
}

其中“label1是-(IBAction)mathButton:(UIButton *)_sender { label1.text = [temp objectForKey:@"m1name"]; } 中的文字字段,.xibm1name

中的其中一个键

但是当我运行它时,它不起作用,并突出显示.plist并将其称为错误访问。

我已经坚持了几天,并尝试了很多东西。答案非常有用。

由于

2 个答案:

答案 0 :(得分:0)

temp=[NSMutableDictionary dictionaryWithContentsOfFile:path];

您没有保留通过dictionaryWithContentsOfFile:path创建的词典。您应该将该行更改为:

temp = [[NSMutableDictionary dictionaryWithContentsOfFile:path] retain];

(并确保它已在dealloc中发布),或者,如果temp是属性,请通过

进行设置
self.temp = [NSMutableDictionary dictionaryWithContentsOfFile:path];

答案 1 :(得分:0)

在.h:

@interface ...
{
    NSMutableDictionary* temp;
}

在.m:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString* path = [[NSBundle mainBundle] pathForResource: @"Data"
                                                     ofType: @"plist"];

    BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath: path];

    if (exists)
    {
        temp = [[NSMutableDictionary alloc] initWithContentsOfFile: path];
        NSLog(@"%@", [temp description]);
    }
}

- (IBAction) mathButton: (UIButton *)_sender
{
    label1.text = [temp objectForKey: @"m1name"];
}

如果是MRC:

- (void) dealloc
{
    [temp release];

    [super dealloc];
}