2015-09-29 2 views
0

У меня эти две ошибки. Я разработал программу, которая работает в 10.10, но завод 10.7. Я не тестировал 10.8 и 10.9. Как исправить проблему. Я использую эти два метода для аутентификации и для чего-то еще. Как это сделать? Переписать все? СпасибоNSConcreteMutableData base64EncodedStringWithOptions error

Ошибки:

2015-09-29 10:32:47.320 PROG[1175:707] -[NSConcreteMutableData base64EncodedStringWithOptions:]: unrecognized selector sent to instance 0x7fd209e1c6b0 2015-09-29 10:32:47.321 PROG[1175:707] An uncaught exception was raised 2015-09-29 10:32:47.322 PROG[1175:707] -[NSConcreteMutableData base64EncodedStringWithOptions:]: unrecognized selector sent to instance 0x7fd209e1c6b0 2015-09-29 10:32:47.326 PROG[1175:707] ( 0 CoreFoundation
0x00007fff9158af56 exceptionPreprocess + 198 1 libobjc.A.dylib
0x00007fff8b305d5e objc_exception_throw + 43 2 CoreFoundation
0x00007fff916171be -[NSObject doesNotRecognizeSelector:] + 190 3
CoreFoundation 0x00007fff91577e23 ___forwarding_
+ 371 4 CoreFoundation 0x00007fff91577c38 _CF_forwarding_prep_0 + 232 5 PROG
0x000000010dd8fc20 -[AppDelegate awakeFromNib] + 1056 6
CoreFoundation 0x00007fff91581fb1 -[NSObject performSelector:] + 49 7 CoreFoundation
0x00007fff91581f32 -[NSSet makeObjectsPerformSelector:] + 274 8
AppKit 0x00007fff86eee347 -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1245 9 AppKit 0x00007fff86ee48bb loadNib + 322 10 AppKit 0x00007fff86ee3db8 +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 217 11 AppKit 0x00007fff86ee3cd3 +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] + 141 12 AppKit 0x00007fff86ee3c16 +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 364 13 AppKit 0x00007fff87154cd7 NSApplicationMain + 398 14 PROG
0x000000010dd8f7f2 main + 34 15 PROG
0x000000010dd8f7c4 start + 52 16 ???
0x0000000000000001 0x0 + 1) 2015-09-29 10:32:47.326 PROG[1175:707] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteMutableData base64EncodedStringWithOptions:]: unrecognized selector sent to instance 0x7fd209e1c6b0' * First throw call stack: ( 0 CoreFoundation 0x00007fff9158af56 exceptionPreprocess + 198 1 libobjc.A.dylib
0x00007fff8b305d5e objc_exception_throw + 43 2 CoreFoundation
0x00007fff916171be -[NSObject doesNotRecognizeSelector:] + 190 3
CoreFoundation 0x00007fff91577e23 ___forwarding_
+ 371 4 CoreFoundation 0x00007fff91577c38 _CF_forwarding_prep_0 + 232 5 PROG
0x000000010dd8fc20 -[AppDelegate awakeFromNib] + 1056 6
CoreFoundation 0x00007fff91581fb1 -[NSObject performSelector:] + 49 7 CoreFoundation
0x00007fff91581f32 -[NSSet makeObjectsPerformSelector:] + 274 8
AppKit 0x00007fff86eee347 -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1245 9 AppKit 0x00007fff86ee48bb loadNib + 322 10 AppKit 0x00007fff86ee3db8 +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 217 11 AppKit 0x00007fff86ee3cd3 +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] + 141 12 AppKit 0x00007fff86ee3c16 +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 364 13 AppKit 0x00007fff87154cd7 NSApplicationMain + 398 14 PROG
0x000000010dd8f7f2 main + 34 15 PROG
0x000000010dd8f7c4 start + 52 16 ???
0x0000000000000001 0x0 + 1)

Спасибо за вашу помощь ... и xhruso00 Я не знаю, должен ли я изменить свой вопрос здесь и написать новый ответ? Спасибо

С

#import <Foundation/Foundation.h> 


@interface NSString (NSStringExtension) 

- (id) base64EncodedStringWithOptions:(NSString *)string; 

- (NSString *) base64Encoding; 

- (NSString *)mh_base64String; 

@end 

и

#import "NSStringExtension.h" 

@implementation NSString (NSStringExtension) 

NSUInteger NSAppKitVersionNumber10_8; 
NSUInteger NSAppKitVersionNumber; 

- (NSString *)mh_base64String 
{ 

    if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_8) { 
#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wdeprecated-declarations" 
     return [self base64Encoding]; 
#pragma clang diagnostic pop 
    } 
    else { 
     return [self base64EncodedStringWithOptions:0]; 
    } 
} 

@end 

и

в главном

@implementation AppDelegate 
... 




    //NSString *authenticationValue = [authenticationData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; 

    NSString *authenticationValue = [authenticationData mh_base64String]; 

     ... 
     @end 

У меня есть одна ошибка:

AppDelegate.m:56:57: error: no visible @interface for 'NSData' declares the selector 'mh_base64String' NSString *authenticationValue = [authenticationData mh_base64String];

У меня есть два предупреждения:

method definition for 'base64EncodedStringWithOptions:' not found 
method definition for 'base64EncodedStringWithOptions:' not found 

это правильно?

В чем проблема?

Благодаря

ответ

0

Вы должны проверить, что OS X версии вы выполняете вы селектору

Непризнанные base64EncodedStringWithOptions селектор: был введен в 10,9

/* Create a Base-64 encoded NSString from the receiver's contents using the given options. */ - (NSString *)base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)options NS_AVAILABLE(10_9, 7_0);

  • (NSString *)base64Encoding NS_DEPRECATED(10_6, 10_9, 4_0, 7_0);

Раствор А: Создать категорию для объект, который загружается из XIB и вызывает метод вместо «base64EncodedStringWithOptions»

- (NSString *)mh_base64String 
{ 
    if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_8) { 
#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wdeprecated-declarations" 
    return [self base64Encoding]; 
#pragma clang diagnostic pop 
    } 
    else { 
    return [self base64EncodedStringWithOptions:0]; 
    } 
} 

Решение B: Если вы не можете заняться категорией, используйте метод swizzling оригинальной реализации с вышеупомянутой реализацией.

0

Я добавил метод в метод непосредственно awakeFromNib следующим образом, и все было нормально.

спасибо много

- (void) awakeFromNib { 
    ... 
//NSString *authenticationValue = [authenticationData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; 
    //NSString *authenticationValue = [authenticationData base64Encoding]; 
    NSString *authenticationValue; 


    // Teste la version du système et affecte la bonne méthode 
    if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_8) { 
#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wdeprecated-declarations" 
    authenticationValue = [authenticationData base64Encoding]; 
     // NSLog(@"--- <= 10.8 ---- %@", authenticationValue); 
#pragma clang diagnostic pop 
    } 
    else { 
    authenticationValue = [authenticationData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; 
     // NSLog(@"----- >= 10.9 ---- %@", authenticationValue); 
    } 

    }