JSON.framework добавить в xcode - PullRequest
       3

JSON.framework добавить в xcode

0 голосов
/ 01 декабря 2010

У меня есть копия JSON.framework в моем

Разработчик / Платформы / iPhoneSimulator.platform / Разработчик / SDKs / iPhoneSimulator4.0.sdk / System / Library / Frameworks

/ Разработчик / Платформы / iPhoneOS.platform / Разработчик / SDKs / iPhoneOS4.0.sdk / System / Library / Frameworks

папка и импорт

#import <JSON/SBJsonParser.h>

но когда я использую его, я получаю ошибку ошибки компоновки Команда /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 завершилась неудачно с кодом выхода 1

Ld build / Debug-iphonesimulator / HelloThere.app / HelloThere обычный i386 cd / Пользователи / samargupta / Рабочий стол / hellothere setenv MACOSX_DEPLOYMENT_TARGET 10.6 setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk -L / Пользователи / samargupta / Desktop / hellothere / build / Debug-iphonesimulator -F / Пользователи / samargupta / Рабочий стол / hellothere / build / Debug-iphonesimulator -filelist /Users/samargupta/Desktop/hellothere/build/HelloThere.build/Debug-iphonesimulator/HelloThere.build/Object normal / i386 / HelloThere.LinkFileList -mmacosx-version-min = 10,6 -Xlinker -objc_abi_version -Xlinker 2 -создание основы -рамка UIKit -рамка CoreGraphics -фреймворк CoreLocation -фреймворк MapKit -фреймворк / рабочий стол пользователя / рабочий стол Jmas-helgata /build/Debug-iphonesimulator/HelloThere.app/HelloThere

ld: фреймворк не найден JSON collect2: ld вернул 1 статус выхода Команда /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 завершилась неудачно с кодом выхода 1

плз, скажите, где я не прав ??

Ответы [ 3 ]

3 голосов
/ 01 декабря 2010

Я написал JSON-парсер сам. Вы можете использовать его, если хотите, скопировав код в исходный код вашего класса.

Вы используете его таким образом:

NSObject *obj = [self jsonToObj:yourJsonString];

Возвращает NSDictionary, NSString или NSArray в зависимости от входа. Разница между моим парсером и другими заключается в том, что он также принимает числовые ключи, которые не допускаются в стандарте JSON. Я не могу гарантировать, что в нем нет ошибок или что он работает со всеми JSON-строками. Пожалуйста, дайте мне обратную связь, если это работает для вас!

-(NSObject*)jsonToObj:(NSString *)json {
    int nextOffset;
    return [self jsonToObj:json offset:0 nextOffset:&nextOffset];
}

static int indexOfChar(NSString *str, unichar c, int offset) {
    int length = [str length];
    for (int i = offset; i < length; i++) {
        if ([str characterAtIndex:i] == c) {
            return i;
        }
    }
    return -1;
}

static int indexOfNonWhitespace(NSString *str, int offset) {
    int len = [str length];
    NSCharacterSet *cSet = [NSCharacterSet whitespaceAndNewlineCharacterSet];
    for (int i = offset; i < len; i++) {
        if (![cSet characterIsMember:[str characterAtIndex:i]]) {
            return i;
        }
    }
    return -1;
}

static int indexOfNonNumber(NSString *str, int offset) {
    int len = [str length];
    for (int i = offset; i < len; i++) {
        unichar c = [str characterAtIndex:i];
        if (c != '-' && c != '.' && (c < '0' || c > '9')) return i; 
    }
    return -1;
}

static int parseHex(NSString *hexStr) {
    unsigned int result = 0;
    int len = [hexStr length];
    for (int i = 0; i < len; i++) {
        result <<= 4;
        unsigned int v = 0;
        unichar c = [hexStr characterAtIndex:i];
        if (c >= '0' && c <= '9') {
            v = c-'0';
        } else if (c >= 'a' && c <= 'f') {
            v = c-'a'+10;
        } else if (c >= 'A' && c <= 'F') {
            v = c-'A'+10;
        }
        result += v;
    }
    return result;
}

-(NSObject*)jsonToObj:(NSString *)json offset:(int)offset nextOffset:(int*)nextOffset {
    offset = indexOfNonWhitespace(json, offset);
    static NSString *jsonExceptionName = @"InvalidJSONException";
    if (offset == -1) {
        @throw [NSException exceptionWithName:jsonExceptionName reason:@"no non-whitespace 1" userInfo:nil];
    }
    unichar startChar = [json characterAtIndex:offset];
    if (startChar == '{') {

        NSMutableDictionary *result = [NSMutableDictionary dictionary];

        int curPos = offset+1;
        while (YES) {
            curPos = indexOfNonWhitespace(json, curPos);
            if (curPos == -1) {
                @throw [NSException exceptionWithName:jsonExceptionName reason:@"no non-whitespace 2" userInfo:nil];
            }
            unichar curChar = [json characterAtIndex:curPos];
            if (curChar == ',') {
                curPos++;
                continue;
            } else if (curChar == '}') {
                *nextOffset = curPos+1;
                return result;
            }
            unichar quotChar = curChar;
            if ((quotChar != '\'' && quotChar != '"') || [json characterAtIndex:curPos-1]=='\\') {
                quotChar = 0;
            }
            NSString *key = nil;
            int semiIndex = 0;
            if (quotChar != 0) {
                int quotStart = curPos+1;
                int quotEnd = quotStart;
                while (YES) {
                    quotEnd = indexOfChar(json, quotChar, quotEnd);
                    if (quotEnd == -1) {
                        @throw [NSException exceptionWithName:jsonExceptionName reason:@"quotation-end not found 1" userInfo:nil];
                    }
                    if ([json characterAtIndex:quotEnd-1] != '\\') break;
                    else quotEnd++;
                }
                key = [json substringWithRange:NSMakeRange(quotStart, quotEnd-quotStart)];
                semiIndex = indexOfChar(json, ':', quotEnd);
                if (semiIndex == -1) {
                    @throw [NSException exceptionWithName:jsonExceptionName reason:@"semicolon not found 1" userInfo:nil];
                }
            } else {
                semiIndex = indexOfChar(json, ':', curPos);
                if (semiIndex == -1) {
                    @throw [NSException exceptionWithName:jsonExceptionName reason:@"semicolon not found 2" userInfo:nil];
                }
                key = [[json substringWithRange:NSMakeRange(curPos, semiIndex-curPos)] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
            }

            [result setObject:[self jsonToObj:json offset:semiIndex+1 nextOffset:&curPos] forKey:key];
        }
    } else if (startChar == '[') {

        NSMutableArray *result = [NSMutableArray array];

        int curPos = offset+1;
        while (YES) {
            curPos = indexOfNonWhitespace(json, curPos);
            if (curPos == -1) {
                @throw [NSException exceptionWithName:jsonExceptionName reason:@"no non-whitespace 3" userInfo:nil];
            }
            unichar curChar = [json characterAtIndex:curPos];
            if (curChar == ',') {
                curPos++;
                continue;
            } else if (curChar == ']') {
                *nextOffset = curPos+1;
                return result;
            }
            [result addObject:[self jsonToObj:json offset:curPos nextOffset:&curPos]];
        }
    } else {
        unichar quotChar = startChar;
        if ((quotChar != '\'' && quotChar != '"') || [json characterAtIndex:offset-1]=='\\') {
            quotChar = 0;
        }
        if (quotChar != 0) {
            int quotStart = offset+1;
            int quotEnd = quotStart;
            while (YES) {
                quotEnd = indexOfChar(json, quotChar, quotEnd);
                if (quotEnd == -1) {
                    @throw [NSException exceptionWithName:jsonExceptionName reason:@"quotation-end not found 2" userInfo:nil];
                }
                if ([json characterAtIndex:quotEnd-1] != '\\') break;
                else quotEnd++;
            }
            *nextOffset = quotEnd+1;
            NSString *str = [json substringWithRange:NSMakeRange(quotStart, quotEnd-quotStart)];
            str = [str stringByReplacingOccurrencesOfString:@"\\\"" withString:@"\""];
            NSMutableString *result = [NSMutableString stringWithCapacity:[str length]];
            int len = [str length];
            for (int i = 0; i < len; i++) {
                unichar c = [str characterAtIndex:i];
                if (c != '\\') {
                    [result appendString:[NSString stringWithCharacters:&c length:1]];
                } else if (i+1 < len) {
                    unichar c2 = [str characterAtIndex:i+1];
                    if (c2 == '\\') {
                        [result appendString:[NSString stringWithCharacters:&c2 length:1]];
                        i++;
                    } else if (c2 == 'u') {
                        unichar cUni = parseHex([str substringWithRange:NSMakeRange(i+2, 4)]);
                        [result appendString:[NSString stringWithCharacters:&cUni length:1]];
                        i += 5;
                    }
                }
            }
            return result;
        } else {
            int numberEnd = indexOfNonNumber(json, offset);
            if (numberEnd == -1) {
                @throw [NSException exceptionWithName:jsonExceptionName reason:@"number-end not found" userInfo:nil];
            }
            //BOOL isFloat = indexOfChar(json, '.', offset)!=-1;
            NSString *numberStr = [json substringWithRange:NSMakeRange(offset, numberEnd-offset)];
            *nextOffset = numberEnd;
            return numberStr;
        }
    }
}
0 голосов
/ 25 апреля 2011

Папка фреймворка 'JSON.framework' должна быть добавлена ​​в каждую папку фреймворка SDK, которую вы хотите использовать (iPhone Simulator, iPhoneOS 4.3), иначе сборка завершится с ошибкой, о которой вы сообщили.В качестве альтернативы вы можете просто связать папку из папки вашего проекта, как упомянул Борн.В любом случае Xcode должен знать, где находится фреймворк для каждого типа сборки вашей компиляции.

0 голосов
/ 01 декабря 2010

Просто создайте в вашем проекте XCode папку с именем «JSON». Все файлы .h и .m, предоставляемые платформой JSON, должны быть в них и хорошо включать их в ваше приложение, создавать, запускать и т. Д. И т. Д.

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