1

以下のように定義されたinitメソッドを持つNSObjectクラスがあります。

- (id)initWithPlistName:(NSString *)plistFileName{
    if (self = [super init]) {
        plistName = plistFileName;
        plistContent = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] 
                                                                pathForResource:plistName ofType:@"plist"]]; // this plistContent array is not allocating in memory
    }
    return self;
}

私は自分のアプリケーションAppDelegate Class didFinishLaunchingWithOptionsメソッドでこのメソッドを呼び出しています。plistContentはNSArrayタイプのiVarですが、制御が plistContent alloc init 行に来るたびに、self を返すときに、配列に割り当てられたメモリがありません。ここで何が起こっているのか、事前に助けていただければ幸いです。

4

3 に答える 3

1

ファイルの存在を確認します:

NSString *path = [[NSBundle mainBundle] pathForResource:plistName ofType:@"plist"];
if(path)
{
   plistContent = [[NSArray alloc] initWithContentsOfFile:path]; 
}
else
{
  NSLog(@"File Not exists");
}
于 2012-09-25T12:49:00.710 に答える
1

plistフライのplistルートキーのデータ型を辞書から配列に変更していないと思います

于 2012-09-25T12:52:45.360 に答える
0

これを試して

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"plistName" ofType:@"plist"];
NSDictionary *myDict = [[NSDictionary alloc] initWithContentsOfFile:filePath];
NSArray *array = [NSArray arrayWithArray:[myDict objectForKey:@"Root"]];
于 2012-09-25T12:41:16.623 に答える