最後我用以下解決我的問題。我在這裏發佈我的代碼,以便其他任何人都可以解決像我這樣的問題;
//在ParsedData.h
#import <Foundation/Foundation.h>
@interface ParsedData : NSObject
{
}
@property(nonatomic,retain)NSMutableArray *parsedDataArr;
@property(nonatomic,retain)NSMutableDictionary *finalDict;
@end
//在ParsedData.m
#import "ParsedData.h"
@implementation ParsedData
@synthesize parsedDataArr;
-(id)init
{
parsedDataArr = [[NSMutableArray alloc]initWithObjects:@"sso_user_id",@"firstname", @"lastname",@"abono",@"hash",@"token",@"login",@"cookie",@"role",@"initial_reads",@"reads_remained",@"valid_until",@"tmp_portal",@"error",nil];
return self;
}
//你ViewVontrller.m ..
#imprort「ParsedData.h」
-(void)buildDataFromString:(NSString*)stringToBuild;
{
ParsedData *pd = [[ParsedData alloc]init];
pd.finalDict = [[NSMutableDictionary alloc]init];
for (int i =0; i < pd.parsedDataArr.count; i++)
{
NSString *arrKey = [pd.parsedDataArr objectAtIndex:i];
if ([stringToBuild rangeOfString:arrKey].location != NSNotFound)
{
int length = 0;
NSString *subString = [stringToBuild substringFromIndex:[stringToBuild rangeOfString:arrKey].location + arrKey.length + 2];
if ([arrKey isEqualToString:@"initial_reads"] || [arrKey isEqualToString:@"reads_remained"])
{
length = [self getIntLengthValue:subString];
[pd.finalDict setValue:[NSNumber numberWithInt:length] forKey:arrKey];
}
else
{
length = [self getStringLengthValue:subString];
if (length == 0)
{
[pd.finalDict setValue:@"" forKey:arrKey];
}
else
{
// Gets the string inside the first set of parentheses in the regex
NSString *inside = [self getKeyValue:subString];
[pd.finalDict setValue:inside forKey:arrKey];
}
}
}
}
NSLog(@"final parsed values dict - %@",pd.finalDict);
}
-(int)getIntLengthValue:(NSString *)subString
{
NSRegularExpression *regex1 = [NSRegularExpression
regularExpressionWithPattern:@"\"(.+?)\"" options:0 error:NULL];
NSTextCheckingResult *result = [regex1 firstMatchInString:subString
options:0 range:NSMakeRange(0, [subString length])];
NSString *str =[subString substringWithRange:[result rangeAtIndex:1]];
NSCharacterSet *alphaNums = [NSCharacterSet decimalDigitCharacterSet];
NSCharacterSet *inStringSet = [NSCharacterSet characterSetWithCharactersInString:str];
BOOL isDigitOnly = [alphaNums isSupersetOfSet:inStringSet];
if (isDigitOnly)
{
return [str intValue];
}
else
{
return 0;
}
}
-(int)getStringLengthValue:(NSString *)subString
{
NSRegularExpression *regex1 = [NSRegularExpression
regularExpressionWithPattern:@":(.+?):" options:0 error:NULL];
NSTextCheckingResult *result = [regex1 firstMatchInString:subString
options:0 range:NSMakeRange(0, [subString length])];
NSString *str =[subString substringWithRange:[result rangeAtIndex:1]];
int length = [str intValue];
return length;
}
-(NSString *)getKeyValue:(NSString *)subString
{
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:@"\"(.+?)\"" options:0 error:NULL];
NSTextCheckingResult *result = [regex firstMatchInString:subString
options:0 range:NSMakeRange(0, [subString length])];
// Gets the string inside the first set of parentheses in the regex
NSString *inside = [subString substringWithRange:[result rangeAtIndex:1]];
return inside;
}
爲什麼你使用字符串作爲響應,使用JSON輕鬆實現。 – 2014-10-27 04:36:06
@KumarKL,但我沒有得到JSON格式的響應。 API由第三方製作。所以我不能告訴他們改變爲JSON響應 – Rohan 2014-10-27 04:37:51
我可以看到一種可能性,即搜索'「」'並將字符串值視爲鍵和值。請使用 – 2014-10-27 04:41:32