2014-10-01 92 views
0

我创建使用狄奥一个调整,改变了“滑动解锁”文本自定义字符串无法初始化类型为“BOOL”的变量 - 狄奥

在我Tweak.xm:

%hook SBLockScreenView 

- (void)setCustomSlideToUnlockText:(id)unlockText { 

NSString *settingsPath = @"/var/mobile/Library/Preferences/com.motion.tweak~prefs.plist"; 
NSMutableDictionary *prefs = [[NSMutableDictionary alloc] initWithContentsOfFile:settingsPath]; 
NSString *text = [prefs objectForKey:@"text"]; 

BOOL enabled = [prefs objectForKey:@"enabled"]; 

if([text isEqualToString:@""] || text == nil || ![enabled]) { 
    %orig(unlockText); 

} 

else if ([enabled]) { 

    unlockText = text; 
    %orig(unlockText); 
} 

} 

%end 

我与返回错误,当我尝试做包:

error: cannot initialize a variable of type 'BOOL' (aka 'signed char') 
     with an rvalue of type 'id' 
BOOL enabled = [prefs objectForKey:@"enabled"]; 
    ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+0

我相信[PREF objectForKey:@“启用“] 将会 返回一个NSNumber *类型。 – 2014-10-01 12:51:40

+0

Tim是正确的,因此将其更改为[[prefs objectForKey:@“enabled”] boolValue] – 2014-10-01 12:53:23

+0

@TimEdwards @ŃikeKamstra谢谢你们,我现在返回一个新的错误,当我尝试制作包时: 'Tweak.xm :41:58:error:expected identifier if([text isEqualToString:@“”] || text == nil ||![enabled]){ ^ Tweak.xm:46:18:error:expected identifier else if([enabled]){ ^ – Motion 2014-10-02 05:11:14

回答

0

第一个问题:

正如@Tim爱德华兹说: 从字典返回的布尔对象作为NSNumber返回(或者是0或1)。因此索要的NSNumber的BooleanValue中有:

[ [prefs objectForKey:@"enabled"] booleanValue] 

至于下一个错误代码来,是因为你是一个有故障的检查与您的if语句:

if([text isEqualToString:@""] || text == nil || ![enabled]) { 
else if ([enabled]) { 

你不需要把布尔括号[]也最好是只检查您的NSString仅长度,而不是使2次检查,所以更改这两个语句:

// I am accustomed with making it <= 0 even though it's impossible. 
if(!enabled || text.length <= 0) { 

else if (enabled) { 
相关问题