目前我正在開發一個Objective-c/Cocoa應用程序,該應用程序在其他文檔中查找圖像。不過,我在分析NSData時遇到了問題,因爲一段時間後NSData變爲空。下面是創建NSData的代碼,獲取長度和一些基本的調試。NSData在一段時間後變爲空
/* Get Data */
NSError *error;
NSData *data = [NSData dataWithContentsOfFile:file options:NSDataReadingMapped error:&error];
/* Split Data into hex chunks */
/* Get length of data */
NSUInteger data_length = [data length];
/* Debug NSLogs */
NSLog(@"[1] Data length: %lu",(unsigned long)data_length);
NSLog(@"[1] Data: %@ with Error: %@",data,error);
當我NSLog的數據在這裏已傳遞被寫入其十六進制表示控制檯文檔。
但是,當我嘗試處理數據時,調試NSLog最後說數據爲空。 (用於十六進制FF for循環檢查數據)的代碼是下面:
/* Declare start and end pointer */
NSUInteger start_point = data_length + 2;
NSUInteger end_pointer = data_length + 2;
/* loop through data */
for (NSUInteger i = 0; i < data_length; i++) {
// Create Range
NSRange range = NSMakeRange(i, (i+1));
// Allocate Byte
Byte byte[1];
// Get data from data set
[data getBytes:byte range:range];
// Convert Byte (char representation) to NSData
NSData *byte_data = [NSData dataWithBytes:byte length:1];
// Set string representation of temp_data
NSString *byte_check = [NSString stringWithFormat:@"%@",byte_data];
// Check Byte
if ([byte_check isEqualToString:@"<FF>"]) {
// First byte found, check if next is correct
NSRange range2 = NSMakeRange((i+1), (i+2));
Byte byte2[1];
[data getBytes:byte2 range:range2];
NSData *byte_data2 = [NSData dataWithBytes:byte2 length:1];
NSString *byte_check2 = [NSString stringWithFormat:@"%@",byte_data2];
if ([byte_check2 isEqualToString:@"<E0>"]) {
// Success found start of JPEG
start_point = i;
// set i to length + 1 to stop loop
i = data_length + 1;
}
}
}
/* Debug point */
NSLog(@"pointer: %lu length: %lu",(unsigned long)end_pointer, (unsigned long)data_length);
NSLog(@"[2] DATA BYTES: %@ with Error: %@",data,error);
在第二部分中所述的NSData的長度也變爲0
下面是NSLog的輸出,我已經縮短十六進制輸出爲了不要太長。
2015-09-10 21:11:24.935 PicRecover[51550:13961579] [1] Data length: 66528
2015-09-10 21:11:24.939 PicRecover[51550:13961579] [1] Data: <504b0304 ...
... 01000000> with Error: (null)
2015-09-10 21:11:24.960 PicRecover[51550:13961579] pointer: 0 length: 0
2015-09-10 21:11:24.960 PicRecover[51550:13961579] [2] DATA BYTES: (null) with Error: (null)
我希望有人比我更瞭解NSData,並能指出我的錯誤。如果您需要更多信息,我可以隨時添加。
非常感謝您提前。
如果分配了* NULL,它將只會'變爲空'*。因此分配了NULL。找出原因並修復使用/假設。 – user2864740
就像你可以從我的代碼中看到的一樣,我沒有指定null。你有什麼想法如何和爲什麼被分配? – jniegsch
再次,**因此NULL *被分配***(或者你或者正在堆棧,這不太可能,或者結果被誤解)。那麼,*哪裏*做的任務發生和*當*他們可以返回NULL?有沒有一種情況是它從未被賦值? – user2864740