想将sinaweibo demo project 加入到 Three20UI中,当用户点击thumb photo 相册的时候,一张放大的图片上加上sinaweibo图标。现在点击sinaweibo图标,可以出现 OAuth 及 XAuth 选择界面,再点击OAuth 时,App crashes.
点击 XAuth 时,出现用户名及密码登录界面,输入后,程序同样崩溃。
用的是下面的代码:
- (void)clickActionItem {} in the three20UI as follows: - (void)clickActionItem { SinaWeiBoSDKDemoViewController *sinaWeiBoSDKDemoViewController = [[[SinaWeiBoSDKDemoViewController alloc] initWithNibName:@"SinaWeiBoSDKDemoViewController" bundle:nil] autorelease]; [self.navigationController pushViewController:sinaWeiBoSDKDemoViewController animated:YES]; }
问题出在这里:[pairs addObject:[NSString stringWithFormat:@"%@=%@", key, [[dict objectForKey:key] URLEncodedString]]];找到了URLEncodedString 的定义,而且我的项目已经引用了这个定义,可为什么还报错哪?如何修改哪? 谢谢!It is defined in the WBUtil.m ( which is already included in the Three20UI ) as :- (NSString *)URLEncodedString
{
return [self URLEncodedStringWithCFStringEncoding:kCFStringEncodingUTF8];
}
-----------------   WBUtil.m
#import "WBUtil.h"
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonHMAC.h>
#import "GTMBase64.h"#pragma  - NSData (WBEncode)@implementation NSData (WBEncode)- (NSString *)MD5EncodedString
{
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5([self bytes], [self length], result);return [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15]];
}- (NSData *)HMACSHA1EncodedDataWithKey:(NSString *)key
{  
NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
    void *buffer = malloc(CC_SHA1_DIGEST_LENGTH);
    CCHmac(kCCHmacAlgSHA1, [keyData bytes], [keyData length], [self bytes], [self length], buffer);NSData *encodedData = [NSData dataWithBytesNoCopy:buffer length:CC_SHA1_DIGEST_LENGTH freeWhenDone:YES];
    return encodedData;
}- (NSString *)base64EncodedString
{
return [GTMBase64 stringByEncodingData:self];
}@end#pragma  - NSString (WBEncode)@implementation NSString (WBEncode)- (NSString *)MD5EncodedString
{
return [[self dataUsingEncoding:NSUTF8StringEncoding] MD5EncodedString];
}- (NSData *)HMACSHA1EncodedDataWithKey:(NSString *)key
{
return [[self dataUsingEncoding:NSUTF8StringEncoding] HMACSHA1EncodedDataWithKey:key];
}- (NSString *) base64EncodedString
{
return [[self dataUsingEncoding:NSUTF8StringEncoding] base64EncodedString];
}- (NSString *)URLEncodedString
{
return [self URLEncodedStringWithCFStringEncoding:kCFStringEncodingUTF8];
}- (NSString *)URLEncodedStringWithCFStringEncoding:(CFStringEncoding)encoding
{
return [(NSString *) CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)[[self mutableCopy] autorelease], NULL, CFSTR("=,!$&'()*+;@?\n\"<>#\t :/"), encoding) autorelease];
}@end#pragma  - NSString (WBUtil)@implementation NSString (WBUtil)+ (NSString *)GUIDString
{
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return [(NSString *)string autorelease];
}@end
得到如下 errors from the debugger console: [Session started at 2012-04-06 02:42:08 +0000.]
2012-04-06 10:42:21.656 TTNavigatorDemo[461:ef03] Current page in photo browser (1 of 10)
2012-04-06 10:42:23.635 TTNavigatorDemo[461:ef03] -[NSCFString URLEncodedString]: unrecognized selector sent to instance 0x1171e0
2012-04-06 10:42:23.638 TTNavigatorDemo[461:ef03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString URLEncodedString]: unrecognized selector sent to instance 0x1171e0'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x015875a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x016db313 objc_exception_throw + 44
    2   CoreFoundation                      0x015890bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x014f8966 ___forwarding___ + 966
    4   CoreFoundation                      0x014f8522 _CF_forwarding_prep_0 + 50
    5   TTNavigatorDemo                     0x000bf4de +[WBRequest stringFromDictionary:] + 438
    6   TTNavigatorDemo                     0x000c05ad +[WBRequest serializeURL:params:httpMethod:] + 192
    7   TTNavigatorDemo                     0x000ba3db -[WBAuthorize startAuthorize] + 249
    8   TTNavigatorDemo                     0x000bd238 -[WBEngine logIn] + 592
    9   TTNavigatorDemo                     0x000c770d -[SinaWeiBoSDKDemoViewController onLogInOAuthButtonPressed] + 53
    10  UIKit                               0x004ab4fd -[UIApplication sendAction:to:from:forEvent:] + 119
    11  UIKit                               0x0053b799 -[UIControl sendAction:to:forEvent:] + 67
    12  UIKit                               0x0053dc2b -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
    13  UIKit                               0x0053c7d8 -[UIControl touchesEnded:withEvent:] + 458
    14  UIKit                               0x004cfded -[UIWindow _sendTouchesForEvent:] + 567
    15  UIKit                               0x004b0c37 -[UIApplication sendEvent:] + 447
    16  UIKit                               0x004b5f2e _UIApplicationHandleEvent + 7576
    17  GraphicsServices                    0x01e53992 PurpleEventCallback + 1550
    18  CoreFoundation                      0x01568944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    19  CoreFoundation                      0x014c8cf7 __CFRunLoopDoSource1 + 215
    20  CoreFoundation                      0x014c5f83 __CFRunLoopRun + 979
    21  CoreFoundation                      0x014c5840 CFRunLoopRunSpecific + 208
    22  CoreFoundation                      0x014c5761 CFRunLoopRunInMode + 97
    23  GraphicsServices                    0x01e521c4 GSEventRunModal + 217
    24  GraphicsServices                    0x01e52289 GSEventRun + 115
    25  UIKit                               0x004b9c93 UIApplicationMain + 1160
    26  TTNavigatorDemo                     0x000028de main + 104
    27  TTNavigatorDemo                     0x0000286d start + 53
)
terminate called throwing an exception