小编Dar*_*ski的帖子

当nib本地化时,Cocoa无法加载窗口nib文件

我正在尝试在我的简单Cocoa应用程序中创建并显示新窗口:

myWindow = [[MyWindowController alloc] initWithWindowNibName:@"MyWindow" owner:self];
[myWindow showWindow:self];
Run Code Online (Sandbox Code Playgroud)

它在没有本地化的基本nib文件下运行良好,但是一旦我打开这个特定nib文件的本地化(使用Xcode"localize"选项可用表单文件检查器),应用程序在执行上面的代码时给出了这个错误:

- [MyWindowController loadWindow]:无法加载窗口nib文件'AuthWindow'.

我是否应该在使用本地化笔尖时更改我正在初始化窗口控制器的方式?只有当包含窗口的nib被本地化时(仅使用一种语言 - 英语),当没有配置本地化时,它才会失败 - 窗口被加载并显示在屏幕上.我找不到合适的答案,我是OSX上的Cocoa新手,但是对CocoaTouch和iOS开发有一些经验.

macos cocoa objective-c

4
推荐指数
2
解决办法
3585
查看次数

如何查找UILabel文本是否缩短/缩小?

我正在开发iOS应用程序(iPhone和iPad),我的视图上有一个显示文本的UILabel.如果文本太长,UILabel会自动缩小它,例如:

"这是一些长文"将显示"这是一些......"

这种行为是正确的,完全可以接受,甚至是预期的,但我想知道文本是否缩短了.有没有办法找到UILabel是否缩短了其内容?

我需要非常简单的解决方案,因为我想使用UILabel魔术功能,比如自动减小字体大小以适应等等.有时文本会很长,所以我会给用户一种方法,在录制后在另一个视图中看到它按钮.但是在文本不会太长的情况下,我想隐藏该按钮以使界面变得简单.任何想法如何实现这一点将不胜感激.

objective-c uilabel ios

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

如何在获取之前更改托管对象类名称

我有一个使用CoreData的Swift应用程序.我List用class 创建了实体MyAppTarget.List.在.xcdatamodeld文件中正确配置了所有内容.为了从持久存储中获取我的实体,我正在使用NSFetchedResultsController:

let fetchRequest = NSFetchRequest()
fetchRequest.entity = NSEntityDescription.entityForName("List", inManagedObjectContext: managedObjectContext)
fetchRequest.sortDescriptors = [ NSSortDescriptor(key: "name", ascending: true) ]
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: "ListFetchedResultsControllerCache")
Run Code Online (Sandbox Code Playgroud)

并且它像预期的那样工作,MyAppTarget.List在获取时返回对象数组.

但是,我想在另一个目标中使用它进行单元测试.我添加了ListMyUnitTestTarget,所以我可以在单元测试目标中访问它.问题是获取的结果控制器返回MyAppTarget.List对象,而不是MyUnitTestTarget.List对象.为了使List实体可测试,我必须公开它以及我需要使用的所有方法,我想避免这种情况.

我试图更改managedObjectClassName属性NSEntityDescription:

fetchRequest.entity.managedObjectClassName = "MyUnitTestTarget.List"
Run Code Online (Sandbox Code Playgroud)

但它会产生异常:

失败:捕获"NSInternalInconsistencyException","无法修改不可变模型".

文件指出,

[...]一旦使用了描述(当它所属的托管对象模型与持久性存储协调器相关联时),它就不能(实际上不能)被更改.[...]如果需要修改正在使用的模型,请创建副本,修改副本,然后使用旧模型丢弃对象.

不幸的是,我不知道如何实现这个流程.我想知道在获取实体之前是否有办法在运行时更改托管对象类名NSFetchedResultsController

core-data nsfetchedresultscontroller nsfetchrequest nsmanagedobject swift

2
推荐指数
1
解决办法
1376
查看次数

CoreData谓词ANY + AND与多对多关系

我在我的模型中定义了这些实体:

[Sample]
- results (to many relation with [Result])

[Parameter]
- results (to many relation with [Result])
- compliant (number value)

[Result]
- parameter (relation with [Parameter])
- sample (relation with [Sample])
Run Code Online (Sandbox Code Playgroud)

对于[Sample]对象"MySample",我需要获取所有[Parameter]对象:

[Result].compliant = 1 AND [Result].sample = MySample
Run Code Online (Sandbox Code Playgroud)

所以,我正在尝试使用谓词来获取[Parameter]对象,谓词将是这些谓词的总和:

// returns all parameters that have a result compliant value equal to 1:
ANY results.compliant = 1

// returns all parameters related with my [Sample] object:
ANY results.sample = MySample
Run Code Online (Sandbox Code Playgroud)

两个谓词都按预期工作,但我想一起使用它,因为我需要获得与我的[Sample]对象连接的所有参数,其结果兼容值等于1.

我尝试过类似的东西:

ANY (results.compliant = 1 AND results.sample = …
Run Code Online (Sandbox Code Playgroud)

core-data nspredicate ios

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