Как понять строку или массив в ответе веб-сервиса - PullRequest
0 голосов
/ 26 августа 2011

Я получаю значение массива из веб-службы.Этот массив состоит из 1 или более 1-элементного массива. Если tempArra - это 1-мерный массив, а затем, если я хочу перенести данные в массиве в другой массив (garbageDatesFor01), я получаю ошибку

EDIT: returning to the web service responses in 2 ways

RESPONSE 1

(
    (
    "2011-08-03",
    "2011-08-17"
    )
)

OR

RESPONSE 2
2011-08-04

NSArray *garbageDatesFor01=[[NSArray alloc] initWithArray:tempArr];

2011-08-26 18:43:35.689 AOK[1846:207] -[NSCFString count]: unrecognized selector sent to instance 0x990d8f0
2011-08-26 18:43:35.691 AOK[1846:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString count]: unrecognized selector sent to instance 0x990d8f0'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x015d25a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x01726313 objc_exception_throw + 44
    2   CoreFoundation                      0x015d40bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x01543966 ___forwarding___ + 966
    4   CoreFoundation                      0x01543522 _CF_forwarding_prep_0 + 50
    5   CoreFoundation                      0x01535d87 -[NSArray initWithArray:] + 39
    6   TwenteMilieu                        0x0001323a -[ForgottenContainerT1 connectionDidFinishLoading:] + 3750
    7   Foundation                          0x00113112 -[NSURLConnection(NSURLConnectionReallyInternal) sendDidFinishLoading] + 108
    8   Foundation                          0x0011306b _NSURLConnectionDidFinishLoading + 133
    9   CFNetwork                           0x0117148e _ZN19URLConnectionClient23_clientDidFinishLoadingEPNS_26ClientConnectionEventQueueE + 220
    10  CFNetwork                           0x0123c6e1 _ZN19URLConnectionClient26ClientConnectionEventQueue33processAllEventsAndConsumePayloadEP20XConnectionEventInfoI12XClientEvent18XClientEventParamsEl + 293
    11  CFNetwork                           0x01167c80 _ZN19URLConnectionClient13processEventsEv + 100
    12  CFNetwork                           0x01167acf _ZN17MultiplexerSource7performEv + 251
    13  CoreFoundation                      0x015b38ff __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
    14  CoreFoundation                      0x0151188b __CFRunLoopDoSources0 + 571
    15  CoreFoundation                      0x01510d86 __CFRunLoopRun + 470
    16  CoreFoundation                      0x01510840 CFRunLoopRunSpecific + 208
    17  CoreFoundation                      0x01510761 CFRunLoopRunInMode + 97
    18  GraphicsServices                    0x01b411c4 GSEventRunModal + 217
    19  GraphicsServices                    0x01b41289 GSEventRun + 115
    20  UIKit                               0x0037fc93 UIApplicationMain + 1160
    21  TwenteMilieu                        0x00002644 main + 102
    22  TwenteMilieu                        0x000025d5 start + 53
)
terminate called after throwing an instance of 'NSException'
Current language:  auto; currently objective-c

1 Ответ

5 голосов
/ 26 августа 2011

Важная строка:

2011-08-26 18:43:35.689 TwenteMilieu[1846:207] -[NSCFString count]: unrecognized selector sent to instance 0x990d8f0

Это означает, что вы звоните count по строке. Объект, который вы считаете массивом, на самом деле является строкой.

При просмотре вашего кода tempArr может быть либо массивом, либо строкой. Попробуйте это:

if ([tempArr isKindOfClass:[NSArray class]])
{
    // Handle array case
}
else if ([tempArr isKindOfClass:[NSString class]])
{
    // Handle string case
}

Вероятно, хорошей идеей будет изменить имя tempArr на что-то другое, например tempResponse или подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...