2017-08-22 1 views
1

私のアプリケーションでは、structがあり、すべてのデータが含まれています。以前のバージョンのXcodeとうまく動作します。しかし、私がXcode 9、ベータ5からiOS 11デバイスで構築すると、内部のデータが失われてしまいます。 私はstructオブジェクトを別のアクティビティにパラメータとして渡します。私はそれにアクセスしようとすると、Xcodeのは、[EXC_BAD_ACCESS]示しており、アプリケーションのクラッシュ、データ損失の後xcode 9 ios 11:構造体内のデータポインタが失われています

typedef struct { 
    NSString *title; 
    MainController *mainController; 
    //.... 
    //.... 
    //more than 200 objects 
} mystruct; 

私の構造体には以下のようになります。 Xcode 9の構造にはサイズ制限がありますか?

UPDATE 1:別のオブジェクトの追加作成し、通過ソース

//declare struct 
mystruct m; 
memset(&m,0,sizeof(mystruct)); 
// setting data for struct 
.... 
... 
... 
// passing param 
[anotherObj showData:&m]; 

方法読み取り値:

- (void)showData:(mystruct *)ms 
{ 
    // get data of struct 
    [self showText : ms->title]; 
} 

注:それだけ

のXcode 9とiOS 11で発生
  • xCode 9 + iOS 11 - >エラー
  • Xcodeの9 + IOSの10 - > OK
  • Xcodeの8 + IOSの11 - > OK
  • Xcodeの8 + IOSの10 - > OK
  • Xcodeの7 + IOSの11 - > OK
  • xCode 7 + iOS 10 - > OK
+2

構造体オブジェクトを作成して渡すコードを追加してください。さらに、パラメータを取る関数のコード。 –

+0

私はソースコードの作成と渡しを追加しました。 – DucVN

+0

構造体を参照するための警告が表示されませんでしたか?これはObjective-C++ではなく、純粋なObjective-Cですか? ARCを使用していますか? –

答えて

1

私は自分で解決しました。その理由は、xCode 9上にアプリケーションをビルドするときです。私のアプリは64ビットコンパイラでビルドされます。

[64ビット整数型を整列するときには注意してください]に関するAppleのドキュメントの警告がありました。しかし、私はそれに気付かなかった。 リンク:Apple doc about aligning bit

次に、教えるようにプラグマを追加するだけで、うまくいきました。

#pragma pack(4) 
struct bar { 
    int32_t foo0; 
    int32_t foo1; 
    int32_t foo2; 
    int64_t bar; 
}; 
#pragma options align=reset 

もう1つの方法として、最大の整列値を最初に、最小の要素を最後に配置して、パディングビットを避けることができます。

@Amin Negm-Awad:ありがとうございました

関連する問題