1

私は長い間答えを探してきましたが、まだ答えが見つからないので、自分で質問すると思いました。

私の iPad アプリでは、テーブルにデータを入力するために .csv ファイルを解析する機能が必要です。http://michael.stapelberg.de/cCSVParseを使用して csv ファイルを解析しています。ただし、ローカル ファイルの解析にしか成功していません。サーバーからファイルにアクセスしようとしていますが、どこにもアクセスできません。

ローカルの .csv ファイルを解析するコードは次のとおりです。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 1)
    {
        //UITextField *reply = [alertView textFieldAtIndex:buttonIndex];
        NSString *fileName = input.text;
        NSLog(@"fileName %@", fileName);
        CSVParser *parser = [CSVParser new];
        if ([fileName length] != 0)
        {
            NSString *pathAsString = [[NSBundle mainBundle]pathForResource:fileName ofType:@"csv"];
            NSLog(@"%@", pathAsString);

            if (pathAsString != nil)
            {
                [parser openFile:pathAsString];
                NSMutableArray *csvContent = [parser parseFile];
                NSLog(@"%@", csvContent);
                [parser closeFile];
                NSMutableArray *heading = [csvContent objectAtIndex:0];
                [csvContent removeObjectAtIndex:0];

                NSLog(@"%@", heading);

                AppDelegate *ap = [AppDelegate sharedAppDelegate];
                NSManagedObjectContext *context = [ap managedObjectContext];

                NSString *currentHeader = [heading objectAtIndex:0];
                NSString *currentValueInfo = [heading objectAtIndex:1];
                NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityForName:@"Field" inManagedObjectContext:context];
                [newObject setValue:@"MIS" forKey:@"header"];
                [newObject setValue:currentHeader forKey:@"fieldName"];

                for (NSArray *current in csvContent)
                {
                    NSManagedObject *newField = [NSEntityDescription insertNewObjectForEntityForName:@"Field" inManagedObjectContext:context];
                    [newField setValue:currentHeader forKey:@"header"];
                    [newField setValue:currentValueInfo forKey:@"valueInfo"];
                    NSLog(@"%@", [current objectAtIndex:0]);
                    [newField setValue:[current objectAtIndex:0] forKey:@"fieldName"];
                    [newField setValue:[NSNumber numberWithDouble:[[current objectAtIndex:1] doubleValue]] forKey:@"value"];
                }
                NSError *error;
                if (![context save:&error]) 
                {
                    NSLog(@"Couldn't save: %@", [error localizedDescription]);
                }
                [self storeArray];
                [self.tableView reloadData];
            }
        }
    }
    input.text = nil;
}

中かっこの開始と終了の奇妙なインデントを許してください。:/

とにかく、これはユーザーから入力を受け取り、ローカルでファイルにアクセスするための私のコードです。皆さんはすでに気付いていると思います。サーバー内のファイルのパスを取得する方法を知りたいです。

また、書き方やその他の悪い習慣など、他に何か問題がある場合は、私が iOS を初めて使用するので教えてください。

よろしくお願いします!私の質問を理解していない場合は、私が自分自身を説明するのが苦手なことがあるので、明確にしてください! :)

4

1 に答える 1

2

私が推測しているように、サーバーの .csv ファイルからデータを取得しようとしていて、そのデータをテーブル ビュー リストに表示したいと考えています。

そのため、NSData でその .csv ファイル データを取得してから作業することをお勧めします。

NSData *responseData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"serverUrl"]];
NSString *csvResponseString = [[[NSString alloc] initWithData:responseData   encoding:NSUTF8StringEncoding] autorelease];
NSLog(@"responseString--->%@",csvResponseString);

ここで、nsstring のメソッド ( componentsSeparatedByString) をコンマ (') で使用してみてください

arrSepratedData = [[responseString componentsSeparatedByString:@","];

この arr を使用してUITableViewデータを入力します。

于 2012-07-12T11:48:17.250 に答える