2011-07-15 5 views
2

こんにちは、私は加速度計データからファイルに書き込もうとしています。ここに私のコードは次のとおりです。ログAccelerometerのデータをiPhoneのファイルに転送

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

//xax.text = [NSString stringWithFormat:@"X:[%2.6f]",acceleration.x]; 
//yax.text = [NSString stringWithFormat:@"Y:[%2.6f]",acceleration.y]; 
//zax.text = [NSString stringWithFormat:@"Z:[%2.6f]",acceleration.z]; 

NSString *acc_x = [[NSString alloc] initWithFormat:@"X:[%2.6f]",acceleration.x]; 
NSString *acc_y = [[NSString alloc] initWithFormat:@"Y:[%2.6f]",acceleration.y]; 
NSString *acc_z = [[NSString alloc] initWithFormat:@"Z:[%2.6f]",acceleration.z]; 

xax.text = acc_x; 
yax.text = acc_y; 
zax.text = acc_z; 

[acc_x release]; 
[acc_y release]; 
[acc_z release]; 


//wfm == 2 //Initialization of Appending to the file 
if (wfm == 2) 
{ 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    NSString *txtFileName = [[NSString alloc] initWithFormat:@"tmp/%@.txt",txtName.text]; 
    NSString *fileName = [NSHomeDirectory() stringByAppendingPathComponent:txtFileName]; 

    //NSString *fileName = [NSHomeDirectory() stringByAppendingPathComponent:@"tmp/acc_w_trial2.txt"]; 

    //Current Contents of the file 
    NSString *fileCurrent = [[NSString alloc] initWithContentsOfFile:fileName]; 

    //Date and Time of each Accelerometer Data 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm:ss:SSS"]; 
    NSDate *date = [NSDate date]; 
    NSString *formattedDateString = [dateFormatter stringFromDate:date]; 

    NSString *msg = [[NSString alloc] initWithFormat:@"%@%@ %@%@%@ \n",fileCurrent,formattedDateString,xax.text,yax.text,zax.text]; 

    //Convert NSstring to NSData 
    NSData* data=[msg dataUsingEncoding: [NSString defaultCStringEncoding]]; 

    //bool fileCreationSuccess = [fileManager createFileAtPath:fileName contents:data attributes:nil]; 
    [fileManager createFileAtPath:fileName contents:data attributes:nil]; 

    [msg release]; 
    [dateFormatter release]; 
    [fileCurrent release]; 
    [txtFileName release]; 

} 

} 

私は警告レベル1とレベル2を取得し、私はロックアップからこれを防ぐために、NSFileManagerのメモリを解放することができます方法はありますか?

答えて

0

あなたはオートリリースプールを試すことができます。

+0

私もそれを試みましたが、まだフリーズしました。返信いただきありがとうございます。 – Vance

1

加速度計データを収集するためのハンドラメソッドはあまり効果がないようです。毎回リソース(メモリ、ファイル)を割り当てており、時間がかかることがあります。 必要なリソースを1回だけ割り当てる必要があります(つまり、dispatch_onceを使用)。ファイルを開いたままにしてください。 NSFileHandle(メソッドfileHandleForWritingAtPath)を使用して、ファイルの末尾にデータを追加します。

さらにNSHomeDirectory()は、iOSアプリがサンドボックス化されているため、ユーザーデータを保存する場所ではありません。

NSTemporaryDirectory()を使用するか、ドキュメントまたはライブラリフォルダに書き込んでください。以下はAppleのサンプルコードのもので、通常はアプリケーションデリゲートクラスのものです。

- (NSString *)applicationDocumentsDirectory { 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil; 
    return basePath; 
} 
+0

ヒントありがとうございました。私はそれらを試しています。それが私のために働くかどうかを知らせます。 – Vance

関連する問題