2011-09-20 87 views
0

我有一個關於NSMutableArray的問題,它是alloc/init作爲一個全局事物。用Accelerometervalues填充NSMutableArray?

我想要做的是:只要二進制變量「permission」設置爲true,就可以使用加速度值填充NSMutableArray。當我將權限設置爲false時,我進一步想要停止陣列中的「錄製」,然後將數組寫入文件,然後通過電子郵件發送電子郵件。我編碼整天(我可能不是最有經驗的編碼器「,並修復許多麻煩,如權限設置,沒有附件中的文件(這是零,tadaaa)使用這個論壇,但對於這個問題,我似乎無法找到。解決

的一點是,附件是零,我不能想到了解決辦法

我在.m文件的開頭如下:

BOOL permission = NO; // key variable to enter recording/not recording state 
    int i = 0; //used to determine place in dataArray 
    NSMutableArray *dataArray; // axis values get dumped in here 

啓動錄音,

- (void)recordStart { //setting permission to yes 
      permission = YES; 
     } 

這允許加速計:UIAccelerometer填充dataArray中:

(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { 

if (permission == YES) { 

// NSLog(@"%f"@"%f"@"%f",acceleration.x,acceleration.y,acceleration.z); 
    NSString *valueString = [NSString stringWithFormat:@"%f, %f,  
    %f",acceleration.x,acceleration.y,acceleration.z]; 

    [dataArray addObject:valueString]; 

    // NSLog(@"%i",i); 
    NSLog(@"Array Count: %d", [dataArray count]); 


} 

}

的的NSLog總是返回0,因此該數組爲空和止動方法不能寫入文件陣列,因爲它是零:

- (void)recordStop { //setting permission to no 

NSLog(@"Array Count: %d", [dataArray count]); 

[[dataArray componentsJoinedByString:@",\n"] writeToFile:[self setFileLocation] atomically:YES encoding:NSUTF8StringEncoding error:NULL]; 

//代碼ommitted

我是否需要的Alloc陣列其他地方,那麼全球範圍內?我不能在加速度計功能中做到這一點,因爲它會重新做它每次觸發(我設置100Hz的頻率)

任何建議嗎?

thx!

回答

0

你的問題很少,但很重要。在開始時,你做了

NSMutableArray *dataArray; 

初始化你的可變數組。問題是,這隻會在對象的RAM中留下一些空間,而不是初始化它。所以,你沒有初始化這個對象,所以它是零。下面是正確的方法:

NSMutableArray *dataArray = [[NSMutableArray alloc] init]; 

改變這種狀況,編譯並運行它,它應該工作。

+0

感謝您的快速幫助,我曾嘗試過,但我得到一個編譯器錯誤:「初始化元素不是一個編譯時常量」 – coernel

+0

是否可能將啓動/停止在一個按鈕上,因此使用有一個函數的數組(加上加速度計),並以某種方式以不同的方式檢索值? Java提供FileWriter,Obj.C 2.0有沒有類似的東西? – coernel

+0

你說你定義了代碼 BOOL權限= NO; //鍵入變量以進入記錄/不記錄狀態 int i = 0; //用於確定dataArray中的位置 NSMutableArray * dataArray; //軸值在這裏' '在.m文件的開頭被轉儲。我想我知道你做錯了什麼。嘗試將該代碼移動到 - (id)init方法中。 –

相關問題