1

コアデータを使用してアプリを作成しています。
facebookアプリなので、コアデータにユーザー情報を保存しました。
そしてプロフィール写真をユーザー情報データに追加したい。

    for (UserInfo *info in fetchedObjects) {
        if ([info.fbId isEqualToString:delegate.currentUserInfo.fbId]) {
            info.details.photos.image  = [NSData dataWithContentsOfURL:url];
            info.details.photos.imageId = [result objectForKey:@"id"];
            info.details.photos.details = info.details;

            delegate.currentUserInfo = info;

            for (UserInfo *info in fetchedObjects) {
                NSLog(@"currentUserInfo : %@", info);
                NSLog(@"curretnUserDetails : %@", info.details);
                NSLog(@"currentUserPhoto : %@", info.details.photos);
            }

            if (![context save:&error]) {
                NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
            }
        }
    }

このように、コアデータ(写真という名前のリレーションショップ)に FB ユーザー ID に対応するデータを追加します。

その結果、真ん中の NSLog には photoInfo データがよく表示されますが、アプリを再起動すると写真データがありません。
私は数日間この問題を解決しませんでした。助けて!

-編集済み

ここに画像の説明を入力

DataModel はこの図のように構成されています。
私は 1 つのコンテキストのみを使用しており、初心者なので、感謝のコメントのすべてを理解することはできません。

-編集済み2

 if (!beExist) {
        UserInfo *userInfo = [NSEntityDescription insertNewObjectForEntityForName:@"UserInfo" inManagedObjectContext:context];
        userInfo.name = [myInfoDic objectForKey:@"name"];
        userInfo.fbId = [myInfoDic objectForKey:@"id"];
        userInfo.type = @"user";
        UserDetails *userDetails = [NSEntityDescription insertNewObjectForEntityForName:@"UserDetails" inManagedObjectContext:context];
        userDetails.gender = [myInfoDic objectForKey:@"gender"];
        userDetails.work = [[[[myInfoDic objectForKey:@"work"] objectAtIndex:0] objectForKey:@"employer"] objectForKey:@"name"];
        NSArray *eduArray = [myInfoDic objectForKey:@"education"];
        userDetails.education = [[[eduArray objectAtIndex:eduArray.count-1] objectForKey:@"school"] objectForKey:@"name"];
        userDetails.birthday = [myInfoDic objectForKey:@"birthday"];
        userDetails.location = [[myInfoDic objectForKey:@"location"] objectForKey:@"name"];
        PhotoInfo *photoInfo = [NSEntityDescription insertNewObjectForEntityForName:@"PhotoInfo" inManagedObjectContext:context];

        userDetails.info = userInfo;
        userInfo.details = userDetails;
        userInfo.details.photos = photoInfo;
        photoInfo.details = userDetails;

        delegate.currentUserInfo = userInfo;

        if (![context save:&error]) {
            NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
        }

このようにユーザー情報を保存しました。AppDelegate でコンテキストを作成しました。Core データのプロジェクトを作成したので、Xcode でそのコードを作成しました。

このログを見ることができます

2012-05-04 00:40:58.997 Feek[16423:fb03] currentUserPhoto : <PhotoInfo: 0x6d15d60> (entity: PhotoInfo; id: 0x6d18550 <x-coredata://2ED200FE-D799-4C66-A0AC-5BE1BC426439/PhotoInfo/p1> ; data: {
details = "0x8830ca0 <x-coredata://2ED200FE-D799-4C66-A0AC-5BE1BC426439/UserDetails/p1>";
image = <ffd8ffe0 00104a46 49460001 02000001 00010000 fffe0004 2a00ffe2 021c4943 435f5052 4f46494c 45000101 0000020c 6c63>;
imageId = 334168116641714;
})

これはコアデータの受け入れデータだと思いますが、アプリを強制終了した後は残りません。

4

0 に答える 0