以编程方式删除NSString的部分内容

时间:2013-09-02 12:29:41

标签: objective-c nsstring

我有一个iOS应用程序通过OAuth 2.0连接到服务器。我以这种形式返回了一个访问令牌:

{accessToken="521515.ab6dc96.51dca3d53c4236d2d4f4460b151bc58d6ec91e14"}

我将它存储在NSString中。我遇到的问题是我只需要引号中的部分。我怎样才能提取出来?

更新

我们这里是我的代码:

GTMOAuth2Authentication *auth_instagram;
auth_instagram = [GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:@"Instagram" clientID:kMyClientID_instagram clientSecret:kMyClientSecret_instagram];

NSLog(@"%@", auth_instagram);

在Xcode控制台中打印:

GTMOAuth2Authentication 0xb2c0a80: {accessToken="541019.ab6dc96.51dc0d264d2d4f60b151bc8d6ec91e14"} 

5 个答案:

答案 0 :(得分:2)

正确的方法是使用正确的格式/解析器解析整个字符串,在这种情况下可能是NSJSONSerialization并从accessToken元素中提取值。

NSDictionary *parsedData = [JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding] options:0 error:NULL];
NSString *value = parsedData[@"accessToken"];

答案 1 :(得分:2)

如果我在http://code.google.com/p/gtm-oauth2/source/browse/trunk/Source/GTMOAuth2Authentication.h正确阅读了课程定义,则GTMOAuth2Authentication会有

@property (retain) NSString *accessToken;

这样你就可以做到

NSString *token = auth_instagram.accessToken;

将令牌作为字符串。

备注: 您的输出

{accessToken="521515.ab6dc96.51dca3d53c4236d2d4f4460b151bc58d6ec91e14"}

是调用description的{​​{1}}方法的结果。 这是而不是JSON 。 JSON看起来像

GTMOAuth2Authentication

答案 2 :(得分:0)

NSArray* components = [accessStr componentsSeparatedByString: "\""];
NSString* requiredStr = [components objectAtIndex: 1];

答案 3 :(得分:0)

 NSDictionary *dic =[NSJSONSerialization JSONObjectWithData: [YourString dataUsingEncoding:NSUTF8StringEncoding] options: NSJSONReadingMutableContainers error: &e];
//yourstring is the string in which u store and &e is just an NSError u can create urself like  NSError *e;

  NSString access_Token=[dic objectForKey:@"accessToken"];

答案 4 :(得分:0)

你得到的是有效的JASON。请尝试以下方法:

NSDictionary *loginInfo = [NSJSONSerialization JSONObjectWithData:[@"{accessToken=\"521515.ab6dc96.51dca3d53c4236d2d4f4460b151bc58d6ec91e14\"}" dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil];
NSString *aToken = [loginInfon objectForKey:@"accessToken"];