質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.21%

Objective-cでmySQLから取得したバイナリデータをUnachrve

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,171

doe

score 17

mySQLにNSArrayをInsertしたく、
NSData* data = [NSKeyedArchiver archivedDataWithRootObject:array];
でバイナリデータに変換し、
NSString* post = [NSString stringWithFormat:@"http://localhost/test.php&array=%@",array];
NSData* data = [post dataUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest* request = [[NSMutableURLRequest alloc] init];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:data]; 
でPOST送信を行いました。対象カラムのデータ型はBLOB型です。
取得時は以下の様に実装し、データの取得までは確認が取れています。
NSString* url = [NSString stringWithFormat:@"http://localhost/load.php"];
// NSURLからNSURLRequest
NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
// サーバーとの通信を行う(URLRequest)
NSData* json = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSArray *array = [NSJSONSerialization JSONObjectWithData:json options:NSJSONReadingAllowFragments error:nil];
//1件目のデータだけで検証しています
NSDictionary* dic = [[NSDictionary alloc] initWithDictionary:(NSDictionary *)array[0]];

NSArray* ary = [NSKeyedUnarchiver unarchiveObjectWithData:(NSData *)dic[@"array"]];//①
①の場所で-[__NSCFString bytes]: unrecognized selector sent to instance 0x7fdabb8170e0となり落ちてしまいます。
NSLogでdic[@"array"]のバイナリデータのログを出力したところ、POST送信前のバイナリデータと一致したのでINSERTからデータ取得まではできています。
しかしUnachrveだけがうまくいきません。どなたかご教授お願いいたします。

ちなみにデータ取得のPHPソースコードは、
<?php

require_once('conf.php');
require_once('functions.php');

$sql = 'SELECT * FROM test';

header('Content-type: application/json');
echo json_encode(connectDatabase()->query($sql)->fetchAll(PDO::FETCH_ASSOC));

?>
です。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる