2011-07-12 83 views
0

嗨我正在寫一個iphone應用程序,我需要存儲二進制數據,即:圖像在Ultralite數據庫中。 我爲此使用以下代碼。在Ultralite數據庫中插入二進制數據時出現錯誤iPhone

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"file_name" ofType:@"png"]; 
NSData *data = [NSData dataWithContentsOfFile:filePath]; 
NSUInteger len = [data length]; 
ul_binary *byteData = (ul_binary*)malloc(len); 
memcpy(byteData, [data bytes], len); 

ULTable *table = connection->OpenTable("NAMES"); 
if(table->InsertBegin()){ 
    table->SetInt(1, (maxId+1)); 
    table->SetString(2, [name UTF8String]); 
    table->SetBinary(3, byteData); 
    table->Insert(); 
    table->Close(); 
    connection->Commit(); 
} 

此代碼是給上線錯誤 'EXC_BAD_ERROR' ::

table->SetBinary(3, byteData); 

如果我評論這行此代碼工作正常。

任何幫助,將不勝感激! 感謝

回答

0

ul_binary的定義是這樣的:

typedef struct ul_binary { 
    /// The number of bytes in the value. 
    ul_length  len; 
    /// The actual data to be set (for insert) or that was fetched (for select). 
    ul_byte  data[ MAX_UL_BINARY ]; 
} ul_binary, * p_ul_binary; 

所以這是一個結構。通過簡單地執行memcpy,您也覆蓋了len字段和各種各樣的事情。因此,這裏是你應該怎麼做(據我可以看到):

ul_binary *byteData = (ul_binary *)malloc(sizeof(ul_binary)); 
memcpy(&byteData->data, [data bytes], len); 
byteData->len = len; 

你還需要檢查你嘗試分配內存len <= MAX_UL_BINARY之前。別忘了free(byteData);

+0

非常感謝。它現在有效。這非常有幫助。 –

相關問題