0

plist を UITableView に読み込もうとしています。私は pLists と tableViews を使用するのは初めてですが、これらの行に沿って何かを使用する必要があることを知っています。私の問題は、「filePath」がどこにあるのか、実際に pList に入れる方法がわからないということですか?

list = [NSArray arrayWithContentsOfFile:filePath];

ファイルパスを取得する以外に、これを行う方法をコードで提案していただければ幸いです。.h ファイルに何かを入れる必要がありますか? ありがとう。

4

1 に答える 1

-1

プロジェクトに .plist を既に追加していると仮定して、特定の .plist に情報を取得して保存する、プロジェクトに追加できるクラスを作成しました。これは機能するシングルトンであるため、どこからでも呼び出すことができます。

最初に、「GetAndSaveData」という名前の新しい NSObject ファイルを作成し、次のコードを .h に投稿します。

@interface GetAndSaveData : NSObject{
    NSMutableDictionary *allData;
    NSString *path;
}

+(GetAndSaveData *)sharedGetAndSave;
-(NSMutableArray *)arrayForKey:(NSString *)dataList;

-(void)setData:(NSMutableArray *)array ForKey:(NSString *)dataList;

@end

および次のコードを .m に:

static GetAndSaveData *sharedGetAndSave;

@implementation GetAndSaveData

-(id)init{

    self = [super init];

    NSError *error;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //1
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    path = [documentsDirectory stringByAppendingPathComponent:@"data.plist"]; 


   if (![fileManager fileExistsAtPath: path]) 
    {
    NSString *bundle = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"]; 

    [fileManager copyItemAtPath:bundle toPath: path error:&error]; 
    }

    allData = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; 

    return self;
}


-(NSMutableArray *)arrayForKey:(NSString *)dataList{
    NSMutableArray *array = [allData objectForKey:dataList];

    return array;
}

-(void)setData:(NSMutableArray *)array ForKey:(NSString *)dataList{

    [allData setObject:array forKey:dataList];
    [allData writeToFile:path atomically:YES];

    if(![allData writeToFile:path atomically:YES])
    {
        NSLog(@".plist writing was unsuccessful");

    }

}

+(GetAndSaveData *)sharedGetAndSave{
    if (!sharedGetAndSave) {
        sharedGetAndSave = [[GetAndSaveData alloc] init];
    }
    return sharedGetAndSave;
}

+(id)allocWithZone:(NSZone *)zone{
    if (!sharedGetAndSave) {
        sharedGetAndSave = [super allocWithZone:zone];
        return sharedGetAndSave;
    } else {
        return nil;
    }
}

-(id)copyWithZone:(NSZone *)zone{
    return self;
}
@end

関数を変更して、さまざまな種類のデータを取得および保存できます。.h ファイルをインポートし、次の手順を実行することで、View Controller で使用できます。

myMutableArray = [[GetAndSaveData sharedGetAndSave]arrayForKey:myKey];
于 2012-08-18T00:36:33.860 に答える