0

私は何がうまくいかないのかを理解するのにあまりにも長い時間を費やしてきたので、彼女の誰かが私を助けてくれることを願っています.

私のコード:

- (IBAction)fedDog {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"dogsFedDays.plist"];  
    NSMutableArray *dogsFedSave = [[NSMutableArray alloc] arrayWithCapacity: 48]; 
    for (int i = 0; i < 48; i++) { 
        NSDictionary *myDict = [[NSDictionary alloc] initWithObjectsAndKeys: 
                                date[i], @"string",
                                fed[i], @"Yes",
                                nil]; 
        [dogsFedSave addObject:myDict]; 
        [myDict release]; 
    } 
    if (![dogsFedSave writeToFile:path atomically:YES]) 
        NSLog(@"not successful in completing this task"); 
}

アクションをボタンに接続しましたが、ボタンを押すとシミュレーターがフリーズし、ドキュメント ディレクトリにファイルが表示されません。

4

3 に答える 3

0

手始めに、アクション メソッドは、引数なしではなく単一の引数を取る必要があります。それを超えて、デバッガーで実行しましたか?

于 2009-12-27T08:42:02.743 に答える
0

未処理の例外が原因で、シミュレーターがフリーズする可能性があります。アプリの実行中にデバッグ コンソールを確認します。アプリケーションがハングする最も可能性の高い理由は、押されたボタンがfedDog:メソッドを呼び出している可能性があることです。メソッドのシグネチャを次のように変更してみてください。

- (IBAction)fedDog:(id)sender {
    // your code
}
于 2009-12-27T08:51:29.290 に答える
0

arrayWithCapacity を NSMutableArrayのインスタンスに送信しようとしていますが、実際には次のように宣言されています。

+ (id)arrayWithCapacity:(NSUInteger)numItems

したがって、クラスメソッドです。

だからどちらかを使う

NSMutableArray *dogsFedSave = [[NSMutableArray alloc] initWithCapacity:48];

また

NSMutableArray *dogsFedSave = [NSMutableArray arrayWithCapacity:48];

自動解放されたオブジェクトになるため、後者の方が良いでしょう (とにかく、dogsFedSave を解放するのを忘れていました…)

于 2009-12-27T09:05:24.287 に答える