我的Cocoa/Application在主线程上有一个托管对象上下文.当我需要更新我的数据时,我的程序将:
这是在主线程上接收通知的函数
- (void)loadManagedObjectFromNotification:(NSNotification *)saveNotification
{
if ([NSThread isMainThread]) {
[self.managedObjectContext mergeChangesFromContextDidSaveNotification:saveNotification];
} else {
[self performSelectorOnMainThread:@selector(loadManagedObjectFromNotification:) withObject:saveNotification waitUntilDone:YES];
}
}
Run Code Online (Sandbox Code Playgroud)
我没有收到任何错误.我的问题是合并结果,它实际上连接了两个上下文中的Managed Objects.
我的实体是一个非常简单的属性和关系列表.
也许合并需要一些指令,以便了解更新的托管对象何时不是新的,而是第一个的编辑版本.我想在某个地方我需要指定一种方式来单义地识别实体,(例如,属性可以像ID一样)和类似合并策略的东西(如果2个被管理对象代表同一个对象,请使用lastModificationDate更多)最近).
我只需要了解如何正确合并2个上下文,以便为每个对象创建一个更新的副本.
这个问题现在对我来说很清楚了.2上下文有很大的不同:ObjectID.当主线程上的上下文使用持久存储协调器获取ManagedObjects时,第二个线程通过获取远程URL来创建这些对象.即使对象具有相同的内容,它们也将具有2个不同的objectID.
我的对象已经有一个唯一的标识符,我可以使用setObjectId来设置这个值.(Apple文档说这不是一个好主意).
cocoa core-data objective-c nsmanagedobject nsmanagedobjectcontext
将OCMock对象传递给函数调用isKindOfClass的方法.但是对于单元测试,返回的值不是模拟类,而是OCMockObject
我正在研究基于doxygen文档的项目,我无法弄清楚如何记录块.让我们设想一个带有块作为回调的异步函数
- (void)startWithCompletionBlock:(void (^)(BOOL success, NSError *error))block;
Run Code Online (Sandbox Code Playgroud)
如何记录这个参数?
我们的想法是在UICollectionView中有一个搜索视图,并且仍然可以使用UIRefreshControl来刷新.在用户向下滚动UICollectionView之前,搜索和UIRefreshControl将不可见.
------------------
| Pull To Refresh |
------------------
| Search |
------------------ <--- Above of this line the content is hidden
| A | B |
------------------
| C | D |
------------------
| Footer |
------------------
Run Code Online (Sandbox Code Playgroud)
我已经尝试将SearchView实现到UICollectionView的节头中,但是这样我就不能使用reloadData,而集合视图的单元格是第一个响应者.
一个好的解决方案应该可以:
我有一个NSCollectionView,其内容由NSArrayController处理.NSCollectionView是可选择的,我需要检索所选元素的列表.我正在尝试观察NSArrayController"selectionIndexes"的关键属性,但它只返回我总是CollectionView中第一个元素的值而不是所选项.
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if([keyPath isEqualTo:@"selectionIndexes"])
{
//True if in the array controller of the collection view really exists at least a selected object
if([[arrayController selectedObjects] count] > 0)
{
NSLog(@"Selected objects: %@", [arrayController selectedObjects]);
}
else
{
NSLog(@"Observer called but no objects where selected.");
}
}
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
我永远不会调用这个方法,如果我手动调用NSLog(@"Selected objects:%@",[arrayController selectedObjects])我得到这个
结果总是这样的
结束更新
2011-07-05 20:44:45.711 collectionView2[2153:903] Selected objects 1: (
"<Hormiga: 0x10013e330>"
)
Run Code Online (Sandbox Code Playgroud)
我想我已经做了一些错误的NSArrayController与NSCollectionView绑定.可能是我的错?告诉我如果你想要更多信息,我甚至可以在你需要的时候以邮政编码发布整个程序.
这是我在我的控制器中用来观察arrayController"selectionIndexes"键的代码.
[arrayController addObserver:self forKeyPath:@"selectionIndexes" options:NSKeyValueObservingOptionNew context:nil];
Run Code Online (Sandbox Code Playgroud)
其中一个问题是修复的,我忘了在NSArrayController和NSCollectionView之间设置相对于键"selectionIndexes"的绑定.现在我可以手动检索selectedObject列表及其正确! …
我想用Cobertura设置我的Jenkins来跟踪代码覆盖率.不幸的是我无法生成有效的xml.
我正在使用:
我的项目正确生成代码覆盖文件,但使用gcovr创建的报告没有用.
我用来生成报告的命令是:
gcovr -r /Users/Shared/Jenkins/Home/jobs/CodeCoverage/workspace
--object-directory /Users/Shared/Jenkins/Home/Library/Developer/Xcode/DerivedData/myProject-aooceqwwovrizceerghqvhflcfty//Build/Intermediates/myProject.build/Development/myProject.build/Objects-normal/x86_64
--exclude '.*Developer.*'
--exclude '.*Tests.*'
--xml
Run Code Online (Sandbox Code Playgroud)
这将创建我的输出:
<?xml version="1.0" ?>
<!DOCTYPE coverage SYSTEM 'http://cobertura.sourceforge.net/xml/coverage-03.dtd'>
<coverage branch-rate="0.0" line-rate="0.0" timestamp="1364322914" version="gcovr 2.5-prerelease (r2774)">
<sources>
<source>
/Users/Shared/Jenkins/Home/jobs/CodeCoverage/workspace/Project/myProject/
</source>
</sources>
<packages/>
</coverage>
Run Code Online (Sandbox Code Playgroud)
其他信息:
如果我删除--object-directory和-r然后我从派生数据目录执行命令,则会生成一个有效的报告.此报告可以从cobertura中读取,但不能显示有关源文件的任何详细信息.
我需要在创建异步请求之前设置一个互斥锁,然后在另一个线程上的此请求的回调中解锁互斥锁.
Apple文档说:
警告:NSLock类使用POSIX线程来实现其锁定行为.向NSLock对象发送解锁消息时,必须确保从发送初始锁定消息的同一线程发送消息.从其他线程解锁锁定可能导致未定义的行为.
如何避免这种"未定义的行为"并使其按预期工作?
我刚刚实现了一个NSCollectionView,就像在开发者页面上描述的那样,它可以很好地工作.
现在,我如何从CollectionView访问collectionViewItems?