2017-02-25 11 views
0

の取得I持って、次の構造体は次のように私は私のシングルトンの一部としてこれを使用する必要がobj Cのプロパティとして構造体の値を使用してアクセスするにはどうすればよいですか? execの悪いアクセス

Helper.h 

typedef struct fileInfo { 
    UInt8 *fileHeaderContent; 
    UInt32 fileHeaderLength; 

} 

typedef struct globalFileStruct { 
    UInt8 *data; 
    UInt32 dataLength; 
    fileInfo fp; 
} 

私はコードで指摘のように
@interface CommonFile : NSObject 

+ (instancetype)sharedInstance; 
@property (nonatomic, assign) globalFileStruct *gFileInfo; 

@end 

@implementation CommonFile 

+ (instancetype)sharedInstance 
{ 
    static CommonFile *sharedInfo = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     sharedInfo = [[self alloc] init]; 
    }); 
    return sharedInfo; 
} 

-(void)someMethod { 
    CommonFile *file = [CommonFile sharedInstance]; 

    /* BAD ACCESS ERR */ 
    if(file.gFileInfo->fp.fileHeaderContent == NULL) { 

     //do something 
    } 
} 
@end 

、私は取得しています悪いアクセスエラー、私はgFileInfoがNULLであると推測します。

私の質問は、このシナリオを処理する最良の方法は何ですか?どのようにポインタオブジェクトがNULLではなく、実際の変数を指していることを確認できますか?

Iは本来のコードがあることを有する試み次のように私はこの方法でそれを使用した場合

@property (nonatomic, assign) globalFileStruct gFileInfo; 

しかし、これに伴う問題は次の通りであった:

file.gFileInfo->fp.fileHeaderContent = [somedata bytes] 

を私はエラーを得た:"Expression not assignable"

+0

'gFileInfo'がnullです。あなたは構造体へのポインタを格納しています。そのポインタにnull以外の値を与えたことはありません。 – jtbandes

+0

structのためにいくつかのメモリを 'malloc'してそれをポインタに割り当てる必要があります。 – Paulw11

+0

@ Paulw11私がinitでfreeをdeallocでmallocした場合、プロセスがkillされたとき、またはdeallocを明示的に呼び出すべきときにdeallocが自動的に呼び出されますか? – ExceptionHandler

答えて

0
file.gFileInfo->fp.fileHeaderContent = [somedata bytes] 

「式が割り当てられません」

構造体全体をローカル変数として構築し、フィールドを置換してプロパティに割り当てます。構造体はかなり重いので、値として引数として渡すことができます。

関連する問題