2013-11-29 2 views
-2

У меня возникла проблема, когда я пытаюсь зарегистрировать содержимое NSDictionary и как только метод будет вызван, приложение выйдет из строя.Ошибка приложения приложения iOS при попытке регистрации NSDictionary

Это код, который я попробовал после того, как совет от талантливого «хакера»:

%hook UserData 
-(int)getVariable:(NSDictionary *)fp8 { 

for (NSString *key in [fp8 allKeys]) { 
%log(@"key: %@, value: %@ \n", key, [fp8 objectForKey:key]); 

} 
return %orig; 
} 
%end 

также попытался:

%hook UserData 
-(int)getVariable { 

int originalValue = %orig; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil; 
NSError *error; 

[[fp8 description] writeToFile:[NSString stringWithFormat:@"%@/lol_%d.txt",basePath,fp8.count] atomically:NO encoding:NSUTF8StringEncoding error:&error]; 

return %orig; 

} 

%end 

Оба пути приводят к краху приложения. Это на iphone 4 с iOS 6.1.3 привязанным JB.

DoD EN[1000]: -[__NSCFConstantString allKeys]: unrecognized selector sent to instance 0x2a7a88 
DoD EN[1000]: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString allKeys]: unrecognized selector sent to instance 0x2a7a88' 
    *** First throw call stack: 

Есть ли у кого-нибудь предложение о том, что здесь может быть неправильным?

+5

На какой линии делает сбой приложения? Какова причина ошибки при сбое (EXEC_BAD_ACCESS? Что-то еще?) Также, каковы знаки «%» в вашем коде, который должен представлять? Я никогда не видел этого раньше в этом контексте. – user1118321

+0

Вы говорите, что он сбой, но не содержит никаких сообщений об ошибке. –

+0

Обратите внимание, что вы не регистрируете NSDictionary, а скорее запись из одного. –

ответ

0

Если вы напечатаете описание, оно должно работать. Следующим образом:

NSLog(@"%@", [dictionary description]); 
+0

Не знаете, как использовать эту информацию, извините за то, что неясно. Код выше - это крючок в функцию приложения. У меня нет исходного кода. Его обратная инженерия, так сказать. – user2700999

2

Журнал аварии обеспечивают довольно объяснение

-[__NSCFConstantString allKeys]: unrecognized selector sent to instance 0x2a7a88 

Я предполагаю, что это журнал аварии, связанный с первым куском кода, публикуемую:

%hook UserData 
-(int)getVariable:(NSDictionary *)fp8 { 

    for (NSString *key in [fp8 allKeys]) { 
     %log(@"key: %@, value: %@ \n", key, [fp8 objectForKey:key]); 
    } 
    return %orig; 
} 
%end 

он выходит из строя при исполнении [fp8 allKeys], утверждая, что allKeys не является действительным селектором для объектов класса __NSCFConstantString Wha t это говорит вам, что fp8 is не a NSDictionary*, а скорее __NSCFConstantString* (то есть указатель на постоянный экземпляр NSString, такой как определенный как NSString* foo = @"bar").

Если это так, то второй код, который вы отправили, также может быть поврежден, потому что count не является допустимым селектором для класса NSString.

Почему вы просто не попробовать следующее, посмотреть, что это дает:

%hook UserData 
-(int)getVariable:(id)fp8 { 

    %log(@"fp8: %@ : %@\n", NSStringFromClass([fp8 class]), [fp8 description]); 

    return %orig; 
} 
%end 
+0

Спасибо! Это действительно был NSString :) – user2700999

+0

Рад, что я мог бы помочь. В этом случае вы можете отметить вышеупомянутый ответ, как принято. Из любопытства: что вы пытаетесь сделать, используя эти методы? – Olotiar

Смежные вопросы