0

私のアプリでは、ユーザーはUITextFieldsを作成できます。各フィールドにタグが追加され、タグがケースに対応するようになります:1、2、3、4、...次に、NSDictionaryのすべてとjson表現を追加します。

-(IBAction)buttonDropBoxuploadPressed:(id)sender{

//screenshot

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy_MM_dd"];


NSString *filename = [NSString stringWithFormat:@"By: %@  ", 
                      [formatter stringFromDate:[NSDate date]]];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                                                     NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent: 
                  [NSString stringWithFormat:@"%@", filename] ];

//[data writeToFile:path atomically:YES];


//NSString *destDir = @"/sandbox/";
// [[self restClient] uploadFile:filename toPath:destDir
//                 withParentRev:nil fromPath:path];

// [[self restClient] loadMetadata:@"/sandbox/"];

//JSON


NSString *object;   
NSString *object2;
NSString *object3;
NSString *object4;
NSString *object5;
NSString *object6;
NSString *object7;
NSString *object8;
NSString *object9;
NSString *object10;
NSString *object11;
NSString *object12;
NSString *object13;
NSString *object14;
NSString *object15;


for (UITextField *text in messagename) {


    int touchedtag = text.tag;

    NSUInteger tagCount = touchedtag;
    switch (tagCount) {

        case 1: 

            object = [NSString stringWithFormat:@"%@", text.text];

            break;
        case 2: 
            object2 = [NSString stringWithFormat:@"%@", text.text];

            break;
        case 3: 

            object3 = [NSString stringWithFormat:@"%@", text.text];

            break;
        case 4: 

            object4 = [NSString stringWithFormat:@" %@", text.text];

            break;

        case 5: 

            object5 = [NSString stringWithFormat:@"%@", text.text];

            break;


        case 6: 

            object6 = [NSString stringWithFormat:@"%@", text.text];

            break;

        case 7: 

            object7 = [NSString stringWithFormat:@"%@", text.text];

            break;
        case 8: 

            object8 = [NSString stringWithFormat:@"%@", text.text];

            break;
        case 9: 

            object9 = [NSString stringWithFormat:@"%@", text.text];

            break;
        case 10: 

            object10 = [NSString stringWithFormat:@"%@", text.text];

            break;
        case 11: 

            object11 = [NSString stringWithFormat:@"%@", text.text];

            break;
        case 12: 

            object12 = [NSString stringWithFormat:@"%@", text.text];

            break;
        case 13: 

            object13 = [NSString stringWithFormat:@"%@", text.text];

            break;
        case 14: 

            object14 = [NSString stringWithFormat:@"%@", text.text];

            break;
        case 15: 

            object15 = [NSString stringWithFormat:@"%@", text.text];

            break;


        default :

            break;



    }
}
//arrays

NSString * objects[] = { object, object2, object3, object4, object5, object6, object7, object8, object9, object10, object11, object12, object13, object14, object15};

NSMutableArray *textnameobject = [[NSMutableArray alloc] initWithCapacity:b];

textnameobject = [NSMutableArray arrayWithObjects:objects count:b];



NSMutableArray *textnamekeys = [[NSMutableArray alloc] initWithCapacity:b];
NSString * textnumber[] = {@"title", @"title", @"title",@"title", @"title", @"title", @"title", @"title", @"title", @"title", @"title", @"title", @"title", @"title"};

textnamekeys = [NSMutableArray arrayWithObjects:textnumber count:b];


//arrays

NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObject: textnameobject forKey:textnamekeys];

/*

NSArray *objects2 = [NSArray arrayWithObjects:jsonDictionary, nil];
NSArray *keys2 = [NSArray arrayWithObjects:allkeys, nil];

NSDictionary *mainDict = [NSDictionary dictionaryWithObjects:objects2 forKeys:keys2];

 */

NSString* jsonString = [jsonDictionary JSONRepresentation];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

[jsonData writeToFile:path atomically:YES];

NSString *destDir = @"/sandbox/";
[[self restClient] uploadFile:filename toPath:destDir
                withParentRev:nil fromPath:path];

[[self restClient] loadMetadata:@"/sandbox/"];

//JSON    

}

ボタンを押すと、次のエラーが発生します。

JSONRepresentationが失敗しました。エラートレースは次のとおりです:( "Error Domain = org.brautaset.JSON.ErrorDomain Code = 1 \" JSON object key must be string \ "UserInfo = 0x2e8370 {NSLocalizedDescription = JSON object key must be string}")

その結果、ドロップボックスエラーが発生します。これは私の以前のアプリで機能し、コードはまったく同じです。jsonライブラリが正しく追加されます。理解できません!!助けてください!

4

1 に答える 1

1

あなたのコード、書き直されました。

- (IBAction)buttonDropBoxUploadPressed: (id)sender
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat: @"yyyy_MM_dd"];

    NSString *filename = [NSString stringWithFormat: @"By: %@ ", [formatter stringFromDate: [NSDate date]]];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex: 0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent: filename];

    NSMutableDictionary *titles = [NSMutableDictionary dictionary];
    for (UITextField *textField in messagename)
    {
        [titles setObject: textField.text forKey: @"title"];
        // as you can see, here you're replacing the value @ at key "title" with a new object on every pass
    }

    NSString *jsonString = [titles JSONRepresentation];
    NSData *jsonData = [jsonString dataUsingEncoding: NSUTF8StringEncoding];

    [jsonData writeToFile: path atomically: YES];

    NSString *destDir = @"/sandbox/";
    [[self restClient] uploadFile: filename toPath: destDir withParentRev: nil fromPath: path];
    [[self restClient] loadMetadata: @"/sandbox/"];
}

ただし、私のコメントに関しては、テキストフィールドのテキストを実際に使用可能なものにシリアル化するわけではありません。これが終わると、せいぜい、次のようなものになります。

{
    "title": "My Text Field Value"
}

また、1つ以上のテキストフィールドのテキストがであると比較的確信していますがnil、これがJSONの問題を引き起こしています。

于 2012-05-09T20:15:47.410 に答える