小编Ben*_*man的帖子

为什么伞形框架不鼓励?

我想分发框架A.框架A依赖于框架B.我希望我的框架的用户只需要包含框架A,但仍然具有对框架B的编程访问权限.

Apple使用"Umbrella Frameworks"的概念一直这样做,但是文档中有这个主题:

不要创建伞框架

虽然可以使用Xcode创建伞形框架,但对大多数开发人员来说这样做是不必要的,不建议这样做.Apple使用伞形框架来掩盖操作系统中库之间的一些相互依赖关系.几乎在所有情况下,您都应该能够将代码包含在单个标准框架包中.或者,如果您的代码足够模块化,您可以创建多个框架,但在这种情况下,模块之间的依赖关系将是最小的或不存在的,并且不应该保证为它们创建保护伞.

为什么这种做法不鼓励?是什么使它成为Apple相互依赖框架问题的良好解决方案,而不是我的?

macos cocoa objective-c

40
推荐指数
2
解决办法
8366
查看次数

为什么Helvetica Neue Bold字形不会作为NSBezierPath中的正常子路径绘制?

我想要的是采用填充矩形并使用其他形状在其中打孔.这正是为此NSBezierPath而设计的那种东西.您添加一个矩形路径,然后添加将"穿"它的子路径,最后填充它.在我的例子中,子路径实际上是文本.没问题,效果很好:

替代文字

除非我使用Helvetica Neue Bold作为我的字体.当我使用它时,我最终得到一个没有任何文字的纯蓝色矩形.但是子路径确实在绘制 - 实际上,如果我将填充的矩形缩小一点,您实际上可以看到一些文本路径:

替代文字

我和Helvetica Neue Italic的行为相同.Helvetica Neue Medium的工作正常,Helvetica Bold,Times New Roman Bold和Arial Bold也是如此.

我已经尝试过使用NSEvenOddWindingRuleNSNonZeroWindingRule.(编辑:显然我并没有真正尝试过NSEvenOddWinding规则,因为事实上这确实可以起作用)

这是我在drawRect我的NSView子类的方法中使用的代码.

NSLayoutManager *layoutManger = [[[NSLayoutManager alloc] init] autorelease];
NSTextContainer *textContainer = [[[NSTextContainer alloc] 
      initWithContainerSize:NSMakeSize(300, 100)] autorelease];

NSFont *font = [NSFont fontWithName:@"Helvetica Neue Bold" size:100];

NSDictionary *textAttribs = [NSDictionary dictionaryWithObjectsAndKeys:
                         font, NSFontAttributeName, nil];

NSTextStorage *textStorage = [[[NSTextStorage alloc] initWithString:@"Hello" 
                                        attributes:textAttribs] autorelease];

[layoutManger addTextContainer:textContainer];
[layoutManger setTextStorage:textStorage];

NSRange glyphRange = [layoutManger glyphRangeForTextContainer:textContainer]; …
Run Code Online (Sandbox Code Playgroud)

fonts cocoa typography core-graphics objective-c

9
推荐指数
1
解决办法
2623
查看次数

什么是崩溃日志中的"特定于应用程序的Backtrace"?

我注意到在我的应用程序的OS X崩溃日志中,第一部分之一是"Application Specific Backtrace".它显示了这样的事情:

Application Specific Backtrace 1:
0   CoreFoundation                      0x00007fff8acef716 __exceptionPreprocess + 198
1   libobjc.A.dylib                     0x00007fff8d723470 objc_exception_throw + 43
2   CoreFoundation                      0x00007fff8ad7df07 -[__NSDictionaryM setObject:forKey:] + 135
3   My App                              0x00000001030c6f72 My App + 81778
4   My App                              0x00000001030c7969 My App + 84329
5   AppKit                              0x00007fff8c3d5afa -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1012
6   AppKit                              0x00007fff8c5ec1d6 -[NSNib _instantiateNibWithExternalNameTable:] + 610
7   AppKit                              0x00007fff8c5ebf43 -[NSNib instantiateNibWithOwner:topLevelObjects:] + 254
8   AppKit                              0x00007fff8c5eb4f7 -[NSViewController loadView] + 184
9   AppKit                              0x00007fff8c593349 -[NSViewController view] + 41
10  My …
Run Code Online (Sandbox Code Playgroud)

debugging macos objective-c

3
推荐指数
1
解决办法
633
查看次数