Ios __NSPlaceholderDictionary在重写UIFonts时崩溃

Ios __NSPlaceholderDictionary在重写UIFonts时崩溃,ios,objective-c,nsdictionary,uifont,Ios,Objective C,Nsdictionary,Uifont,我正在使用以下代码覆盖应用程序中的所有字体。我花了好几个小时才弄明白这一点,但是当字体被覆盖时,正常的功能就会中断(例如:在UITableViewCell上长按手势),并且UIBarButtonItem的所有实例都被截断,只在导航栏中显示… 撞车事故总是造成严重后果 *由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'*-[\u NSPlaceholderDictionary initWithObjects:forKeys:count:]:尝试从对象

我正在使用以下代码覆盖应用程序中的所有字体。我花了好几个小时才弄明白这一点,但是当字体被覆盖时,正常的功能就会中断(例如:在
UITableViewCell
上长按手势),并且
UIBarButtonItem
的所有实例都被截断,只在导航栏中显示

撞车事故总是造成严重后果

*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'*-[\u NSPlaceholderDictionary initWithObjects:forKeys:count:]:尝试从对象[0]插入nil对象'

我做错什么了吗?有没有更好的方法来覆盖字体而不必手动设置每个标签、段控件等。。。此应用不会出现在应用商店中,因此我愿意接受任何建议


奖励问题,
#pragma-clang诊断弹出窗口
#pragma-clang诊断推送
。我知道它保存编译器的状态,使警告静音,然后恢复状态。我是否可以只忽略
#pragma clang diagnostic ignored

您还可以将UILabel子类化并在任何地方使用它:

例如,在init方法中调用setFont


然后,只需用子类查找并替换UILabel,您还可以将UILabel子类化并在任何地方使用它:

例如,在init方法中调用setFont


然后简单地用你的子类查找并替换UILabel

,以便将其标记为已回答,我在听rmaddy的评论


不要尝试替换类别中的标准UIFont方法,而是将您自己的方法添加到类别中。示例-将其命名为myBoldSystemFontOfSize:,而不是覆盖boldSystemFontOfSize:。或者使用UI_外观,或者使用label.font=[label.font fontWithSize:newSize]更改标签的字体大小

我走了
UI\u外观
路线

[[UILabel appearance] setFont:[UIFont fontWithName:fontName size:fontSize]];

如果您的标签需要不同的字体大小,这可能会有问题,幸运的是,我需要更改的标签都是相同的字体大小

为了将此标记为已回答,我在听rmaddy的评论


不要尝试替换类别中的标准UIFont方法,而是将您自己的方法添加到类别中。示例-将其命名为myBoldSystemFontOfSize:,而不是覆盖boldSystemFontOfSize:。或者使用UI_外观,或者使用label.font=[label.font fontWithSize:newSize]更改标签的字体大小

我走了
UI\u外观
路线

[[UILabel appearance] setFont:[UIFont fontWithName:fontName size:fontSize]];

如果您的标签需要不同的字体大小,这可能会有问题,幸运的是,我需要更改的标签都是相同的fontsize

从不覆盖Objective-C类别中的方法。这是未定义的行为,会导致不好的事情发生。有没有关于如何更改我所有字体的建议。我对UI外观进行了修补,但缺点是并非所有标签的字体大小都相同,我无法在不指定大小的情况下更改字体。除了尝试替换类别中的标准
UIFont
方法外,请将您自己的方法添加到类别中。示例-将其命名为
myBoldSystemFontOfSize:
,而不是覆盖
boldSystemFontOfSize:
。或者使用
UI\u外观
或者使用
label.font=[label.font-fontWithSize:newSize]更改标签的字体大小。切勿覆盖Objective-C类别中的方法。这是未定义的行为,会导致不好的事情发生。有没有关于如何更改我所有字体的建议。我对UI外观进行了修补,但缺点是并非所有标签的字体大小都相同,我无法在不指定大小的情况下更改字体。除了尝试替换类别中的标准
UIFont
方法外,请将您自己的方法添加到类别中。示例-将其命名为
myBoldSystemFontOfSize:
,而不是覆盖
boldSystemFontOfSize:
。或者使用
UI\u外观
或者使用
label.font=[label.font-fontWithSize:newSize]更改标签的字体大小