我整个下午一直在和这个离奇的人打架,没有任何结果。之前,我能够使用Theos的Tweak模板创建一个Tweak,并通过使用其目录中的模板创建子项目来向其添加PreferenceBundle。我会运行调整,在Settings.app中打开它的页面,它会响亮说明符列表(当你不修改它时包含“Awesome Switch 1”)。
换句话说,我只需创建项目几乎不需要修改即可获得此屏幕:
现在,今天我以同样的方式创建了一个新项目(先创建Tweak,PreferenceLoader项目第二)并尝试获得此结果但无济于事。
我一直在与这个战斗超过6个小时。我在两个越狱设备中尝试过它。我已经卸载并重新安装了Theos。我重置了我的电脑,我重新启动了两台设备,无论我做什么,该屏幕都不包含它的首选项。它包含背景,但根本没有说明符。
plist目前看起来像这样。运行-lint时,我不需要plist工具不返回任何语法错误:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>cell</key>
<string>PSGroupCell</string>
<key>label</key>
<string>Five First Page</string>
</dict>
<dict>
<key>cell</key>
<string>PSSwitchCell</string>
<key>default</key>
<true/>
<key>defaults</key>
<string>s</string>
<key>key</key>
<string>AwesomeSwitch1</string>
<key>label</key>
<string>Awesome Switch 1</string>
</dict>
</array>
<key>title</key>
<string>SomeFive</string>
</dict>
</plist>
(Five.plist .PreferenceLoader子项目名为“Five”)。
首选项.mm看起来像这样:
@interface PSListController
-(id)loadSpecifiersFromPlistName:(id)name target:(id)tar;
@end
@interface FiveListController: PSListController
{
id _specifiers;
}
-(id)specifiers;
@end
@implementation FiveListController
- (id)specifiers {
if(_specifiers == nil) {
_specifiers = [[self loadSpecifiersFromPlistName:@"Five" target:self] retain];
}
return _specifiers;
}
@end
// vim:ft=objc
现在我知道该文件存在且正在被正确读取,因为我检查了它是否存在于/ Library / PreferenceBundles中,并且因为您可以更改上面plist中的标题键,它将反映在Preference的页面导航栏标题中。我不确定是什么导致它读取标题而不是其他的说明符。
我完全被这个目瞪口呆。我从未见过使用PreferenceLoader项目的这种奇怪的行为,它看起来像是完全随机的,因为我没有改变任何Theos设置或任何东西。
对此有任何帮助将不胜感激。
答案 0 :(得分:0)
我明白了。
问题出在首选.mm文件中。将我提出的问题与这个问题进行比较:
@interface PSListController
{
id _specifiers;
}
-(id)specifiers;
-(id)loadSpecifiersFromPlistName:(id)name target:(id)target;
@end
@interface NotifierSettingsListController: PSListController {
}
@end
@implementation NotifierSettingsListController
- (id)specifiers {
if(_specifiers == nil) {
_specifiers = [[self loadSpecifiersFromPlistName:@"NotifierSettings" target:self] retain];
}
return _specifiers;
}
@end
// vim:ft=objc
由于我没有标题,我必须声明我将使用的标题。但我在那里做错了。我应该把_specifiers和PSListController子类的所有方法放在PSListController本身,而不是我的子类。