0

タスクオーガナイザーiOSアプリを作っています。タスクを入力すると、配列に保存されます。電話間でタスクを共有できるようにしたかったので、各アレイを保存する方法を追加しました。

現在、私は自分のアイデアをローカルで使用しています。ページにはタイトルとパスワードがあります。保存ボタンを押すと、アレイはタイトルとパスワードに固有のファイルに保存されます(これは非常にうまく機能し、毎回保存されます)。

ファイル内のすべての情報を配列に戻して、表示できるようにする方法を見つける必要があります。これは私が試したことであり、「タスクの取得」ボタンを除いてすべてが正常に機能することを覚えておいてください。私の問題はgetFile無効です。

BNRAppDelegate.m

#import "BNRAppDelegate.h"

NSString *docPath()
{
    NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                            NSUserDomainMask,
                                                            YES);
    return [[pathList objectAtIndex:0] stringByAppendingPathComponent:@"data.td" ];
}

@implementation BNRAppDelegate

@synthesize window = _window;

#pragma mark - Application delegate callbacks

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{
    return YES;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary     *)launchOptions
{
    NSArray *plist = [NSArray arrayWithContentsOfFile:docPath()];
    if (plist)
    {
        tasks = [plist mutableCopy];
    }
    else
    {
        tasks = [[NSMutableArray alloc] init];
    }

    CGRect windowFrame = [[UIScreen mainScreen] bounds];
    UIWindow *theWindow = [[UIWindow alloc] initWithFrame:windowFrame];
    [self setWindow:theWindow];

    [[self window] addSubview:taskTable];
    [[self window] addSubview:taskField];
    [[self window] addSubview:titleField];
    [[self window] addSubview:insertButton];
    [[self window] addSubview:clearButton];
    [[self window] addSubview:shareButton];
    [[self window] addSubview:passField];
    [[self window] addSubview:getButton];

    [[self window] setBackgroundColor:[UIColor whiteColor]];
    [[self window] makeKeyAndVisible];

    return YES;
}
- (void)addTask:(id)sender
{
    NSString *t = [taskField text];

    if ([t isEqualToString:@""]) {
        return;
    }

    [tasks addObject:t];
    [taskTable reloadData];
    [taskField setText:@""];
    [taskField resignFirstResponder];    
}
- (void)takeTask:(id)sender
{
    [tasks removeAllObjects];
    [taskTable reloadData];
    [tasks writeToFile:docPath()
            atomically:YES];
}
- (void)saveTask:(id)sender;
{
    if ([titleField text] == @""){
        //
    } else {
        NSString * original = [titleField text];
        NSString * pass = [passField text];
        NSString * step = [NSString stringWithFormat:@"%@.%@", original, pass];
        NSString * file = [NSString stringWithFormat:@"%@.plist", step];

        [tasks writeToFile:[NSString stringWithFormat:@"/tmp/%@", file] 
                atomically:YES];
        [tasks writeToFile:docPath()
                atomically:YES];
    }
}
- (void)getFile:(id)sender;
{
    NSString * original = [titleField text];
    NSString * pass = [passField text];
    NSString * step = [NSString stringWithFormat:@"%@.%@", original, pass];
    NSString * file = [NSString stringWithFormat:@"%@.plist", step];

    NSMutableArray *theTasks = [NSMutableArray arrayWithContentsOfFile:[NSString stringWithFormat:@"/tmp/%@", file]];
    tasks = [theTasks mutableCopy];

    [tasks writeToFile:docPath()
            atomically:YES];
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:  (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
        [tasks removeObjectAtIndex:indexPath.row]; [tableView deleteRowsAtIndexPaths:[NSArray   arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
}

#pragma mark - Table View management

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [tasks count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *c= [taskTable dequeueReusableCellWithIdentifier:@"Cell"];

    if (!c) {
        c = [[ UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
    }

    NSString *item = [tasks objectAtIndex:[indexPath row]];
    [[c textLabel] setText:item];

    return c;

} 
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [tasks writeToFile:docPath()
            atomically:YES];
}
- (void)applicationWillTerminate:(UIApplication *)application
{
    [tasks writeToFile:docPath()
            atomically:YES];
}

@end

よろしければお役に立てれば幸いです。

4

1 に答える 1

0

私はあなたが間違った方法でそれをしていると思います。username.password.plistとして保存したいので、コードでdata.tdが何に使用されているのかわかりません。

これを試してみてください。コードに基づいてファイルをローカルに保存および取得する方法をガイドする場合があります。

NSString *pathPlist(NSString *filename)
{
    NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                            NSUserDomainMask,
                                                            YES);
    return [[pathList objectAtIndex:0] stringByAppendingPathComponent:filename];
}

- (void)saveTask:(id)sender {
    NSString * original = @"Hello";
    NSString * pass = @"123";
    NSString * step = [NSString stringWithFormat:@"%@.%@", original, pass];
    NSString * file = [NSString stringWithFormat:@"%@.plist", step];

    NSString *path = pathPlist(file);
    NSMutableArray *array = [[NSMutableArray alloc] init];
    if (path) {
        NSArray *data = [NSArray arrayWithContentsOfFile:path];
        if (data) {
            [array setArray:data];
        }
        [array addObject:@"My Task"];
        BOOL iswritten = [array writeToFile:path atomically:YES];
        if (!iswritten) {
            NSLog(@"Failed");
        }
        [data release];
    }
}

- (void)getFile:(id)sender {
    NSString * original = @"Hello";
    NSString * pass = @"123";
    NSString * step = [NSString stringWithFormat:@"%@.%@", original, pass];
    NSString * file = [NSString stringWithFormat:@"%@.plist", step];

    NSString *path = pathPlist(file);
    NSMutableArray *array = [[NSMutableArray alloc] init];
    if (path) {
        NSArray *data = [NSArray arrayWithContentsOfFile:path];
        if (data) {
            [array setArray:data];
        }
    }
    NSLog(@"%@", array);
}

注:var配列は、filename(username.password.plist)からのデータを保持します

于 2012-06-09T03:00:47.957 に答える