0

NSStringをURLエンコードするための短いメソッドがあります。

- (NSString *)urlEncodeValue:(NSString *)strToEncode
{
    NSLog(@"Testing strToEncode: %@", strToEncode);
    NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)strToEncode, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8));
    NSLog(@"Testing strToEncode: %@", strToEncode);
    NSLog(@"Testing urlEncode: %@", encodedString);
    return encodedString;
}

NSLog行はデバッグ用であり、この問題を解決したときにコメント化されます。

文字列、、で試してみると、Testing URLencode % "hmm"期待どおりに機能します。

2012-11-03 06:44:02.140 FoodyU[23223:c07] Testing strToEncode: Testing URLencode % "hmm" 
2012-11-03 06:44:02.141 FoodyU[23223:c07] Testing strToEncode: Testing URLencode % "hmm" 
2012-11-03 06:44:02.142 FoodyU[23223:c07] Testing urlEncode: Testing%20URLencode%20%25%20%22hmm%22%20

次のJSONarrayで試してみても、次のことはできません。

2012-11-03 06:44:02.142 FoodyU[23223:c07] Testing strToEncode: (
        {
        dataMode = fastUpload;
        dateCreated = "373599360.708794";
        dateModified = "373599414.702938";
        dateSynced = "373632241.82217";
        entityName = CommodityTypes;
        myName = " Commodity Type";
        sortKey = 99;
        username = adamekPhoneDev;
        uuidKey = "338A0507-355F-4DF5-97A4-C0F1FF651D6F";
    },
        {
        dataMode = fastUpload;
        dateCreated = "373599366.851905";
        dateModified = "373599382.473983";
        dateSynced = "373632241.82217";
        entityName = CommodityTypes;
        myName = "Anoth Type";
        sortKey = 90;
        username = adamekPhoneDev;
        uuidKey = "6C64E7C6-4C57-4DFC-BECA-D2AB2339E204";
    }
)
2012-11-03 06:44:02.143 FoodyU[23223:c07] -[__NSArrayM length]: unrecognized selector sent to instance 0x9946ae0
2012-11-03 06:44:02.145 FoodyU[23223:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM length]: unrecognized selector sent to instance 0x9946ae0'
*** First throw call stack:
(0x1ffb012 0x1690e7e 0x20864bd 0x1feabbc 0x1fea94e 0x1f76090 0x1feba1d 0x284d8 0x28a52 0x251cb 0x21c18 0x219b5 0x6878d5 0x687b3d 0x108ee83 0x1fba376 0x1fb9e06 0x1fa1a82 0x1fa0f44 0x1fa0e1b 0x24267e3 0x2426668 0x5d865c 0x224d 0x2175)
libc++abi.dylib: terminate called throwing an exception

変換が機能する前に文字列をログに記録します。うまくフォーマットされたJSON文字列です。次に、内部のどこかからのエラーメッセージでクラッシュしますNSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)strToEncode, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8));

ヘルプ?

4

2 に答える 2

0

[__NSArrayM length]: unrecognized selector sent to instance 0x9946ae0

あなたはaが期待されるNSArrayところに置いています。NSString最初にJSONデータを文字列にシリアル化することをお勧めします。

とにかく、なぜJSONデータをURLエンコードするのですか?

于 2012-11-03T11:16:36.530 に答える
0

これを使ってみてください

NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
                        NULL,
                        (CFStringRef)unencodedString,
                        NULL,
                        (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                        kCFStringEncodingUTF8 );
于 2012-11-03T11:22:40.713 に答える