小编And*_*sen的帖子

在拖放过程中打开NSTableView中的间隙

我有一个简单的单列,基于视图的NSTableView,其中包含可以拖动的项目以重新排序它们.在拖放过程中,我想制作它,以便在鼠标下方的位置打开待删除项目的间隙.当您拖动以重新排序曲目时,GarageBand会执行类似的操作(此处为视频:http://www.screencast.com/t/OmUVHcCNSl).据我所知,在NSTableView中没有内置的支持.

有没有其他人试图将此行为添加到NSTableView并找到了一个很好的解决方案?我已经想到并尝试了几种方法而没有取得多大成功.我的第一个想法是通过发送-noteHeightOfRowsWithIndexesChanged:我的数据源的-tableView:validateDrop:...方法,然后返回正常高度的两倍,在拖动过程中将鼠标下方行的高度加倍-tableView:heightOfRow:.不幸的是,我可以说,NSTableView在拖放期间不会更新其布局,因此尽管调用noteHeightOfRowsWithIndexesChanged:,行高度实际上并未更新.

请注意,我正在使用基于视图的NSTableView,但我的行并不复杂,以至于如果这样做有助于实现此目的,我无法移动到基于单元格的表视图.我知道在拖动完成后,为放置的项目设置间隙动画的简单内置功能.我正在寻找一种在拖拽进行过程中打开间隙的方法.此外,这是一个应用程序在Mac App Store中出售,因此它不能使用私有API.

编辑:我刚刚向Apple提交了一个增强请求,要求内置支持此行为:http://openradar.appspot.com/12662624.Dupe,如果你也想看到它.更新:我请求的增强功能是在OS X 10.9 Mavericks中实现的,现在可以使用NSTableView API实现此行为.请参阅NSTableViewDraggingDestinationFeedbackStyleGap.

macos cocoa drag-and-drop objective-c nstableview

22
推荐指数
3
解决办法
4562
查看次数

尝试在Mac OS X中打开串行端口时,open()函数挂起(永不返回)

我遇到了一个问题,当我尝试打开一个串口时,open函数永远不会返回.它不会一直发生,如果我拔掉USB到串口适配器并将其重新插入,问题就会消失一段时间.我的代码如下所示:

fileDescriptor = open(bsdPath, O_RDWR | O_NOCTTY);
Run Code Online (Sandbox Code Playgroud)

其中bsdPath是/dev/cu.KeySerial1.我已经尝试将O_NONBLOCK选项添加到open命令,但它仍然挂起.

当然,我想了解为什么会这样.我的信念是,无论问题是什么,在指定O_NONBLOCK的情况下,即使无法打开端口,open也应该返回.如果它无法打开端口,则fileDescriptor应该为-1并且应该设置errno(我在调用open之后立即检查).当然,这不会发生.我的假设不正确吗?是否有一些已知的原因使open()永远不会返回,即使在遇到错误时指定了O_NONBLOCK?

在10.7.2上使用最新版本的Prolific PL-2303驱动程序和基于PL-2303的USB转串口适配器,我今天再次能够重现这个问题.几点说明:

  • 挂起open()呼叫时,使用command-不能中断该过程.(控制-C).
  • Running ps -avx显示进程的进程状态代码U. 我不确定这段代码是什么意思.它不会出现在ps由Google搜索找到的手册页中.ps我的机器上的手册页中没有过程状态代码列表.也许它特定于Mac(10.4+?)版本ps
  • 我注意到在第一次出现此问题之前的运行中,我调用ioctl()将端口上的选项重置回状态,然后我将其更改为在我的程序中使用挂起.我不得不杀死程序(通过Xcode的调试器).紧接着,在下一次推出该计划后,open()鸿...

macos posix serial-port

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

为什么点语法不能用于返回类型为instancetype的方法?

假设我在NSObject上有一个定义以下方法的类别:

+ (instancetype)allocTemplate
{
    id instance = [self new];

    return instance;
}
Run Code Online (Sandbox Code Playgroud)

我有以下课程:

@interface FDActor : NSObject

@property (nonatomic, copy) NSString *name;

+ (void)sayHi;    

@end


@implementation FDActor

+ (void)sayHi
{
    [self allocTemplate].name;
}

@end
Run Code Online (Sandbox Code Playgroud)

[self allocTemplate].name如果自我是FDA的话,如何在编译时出错?

我知道如果你使用普通的消息发送语法,它是有效的,但我明显感兴趣的是点语法错误.

properties objective-c clang instancetype

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

使用自动布局时,如何使UIScrollView仅向一个方向放大

我试图让UIScrollView只允许在水平方向上放大.滚动视图使用纯自动布局方法设置.通常的方法是在许多Stack Overflow答案(例如这个)和其他资源中建议的.在自动布局存在之前,我已成功在应用中使用此功能.方法如下:在滚动视图的内容视图中,我覆盖setTransform()并修改传入的变换以仅在x方向上缩放:

override var transform: CGAffineTransform {
    get { return super.transform }
    set {
        var t = newValue
        t.d = 1.0
        super.transform = t
    }
}
Run Code Online (Sandbox Code Playgroud)

我还重置滚动视图的内容偏移量,以便在缩放过程中不会垂直滚动:

func scrollViewDidZoom(scrollView: UIScrollView) {
    scrollView.contentSize = CGSize(width: scrollView.contentSize.width, height: scrollView.frame.height)
    scrollView.contentOffset = CGPoint(x: scrollView.contentOffset.x, y: 0.0)
}
Run Code Online (Sandbox Code Playgroud)

不使用autolayout时,这非常好用:

缩放没有自动布局

但是,使用自动布局时,内容偏移在缩放过程中会导致错误.内容视图仅在水平方向上缩放,但它会垂直移动:

使用自动布局缩放

在GitHub上放了一个示例项目(用于在这个问题中制作视频).它包含两个故事板,Main.storyboard和NoAutolayout.storyboard,它们是相同的,除了Main.storyboard已打开autolayout而NoAutolayout没有.通过更改主界面项目设置在它们之间切换,您可以在两种情况下查看行为.

我真的不想关闭autolayout,因为它解决了以比手动布局要求更好的方式实现我的UI的许多问题.有没有办法在自动布局缩放期间保持垂直内容偏移正确(即零)?

编辑:我已经在示例项目中添加了第三个故事板AutolayoutVariableColumns.storyboard.这会添加一个文本字段来更改GridView中的列数,从而更改其内在内容大小.这更加密切地显示了在提示此问题的真实应用程序中我需要的行为.

zoom uiscrollview ios autolayout swift

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

如何在使用嵌套上下文时自动设置Core Data关系

我正在努力找到一个合适的解决方案来解决在核心数据中使用嵌套的托管对象上下文时出现的问题.采用具有两个enites的模型,Person和Name,其中每个Person与Name具有一对一的关系,而Name的person关系不是可选的.以前,在Person的-awakeFromInsert方法中,我会自动为新Person创建一个Name实体:

- (void)awakeFromInsert
{
    [super awakeFromInsert];

    NSManagedObjectContext *context = [self managedObjectContext];
    self.name = [NSEntityDescription insertNewObjectForEntityForName:@"Name" inManagedObjectContext:context];
}
Run Code Online (Sandbox Code Playgroud)

这在单个非嵌套的托管对象上下文中工作得很好.但是,如果上下文具有父上下文,则在保存子上下文时,将在父上下文中创建新的Person对象,并在复制原始Person的属性和关系之前-awakeFromInsert再次在此新对象上调用该对象.因此,创建另一个Name对象,然后在复制现有名称关系时"断开连接".保存失败,因为浮动Name的now-nil 关系验证失败.此处以及其他地方描述此问题.person

到目前为止,我一直无法找到解决这个问题的好方法.在getter方法中懒惰地创建关系实际上会导致同样的问题,因为当在父上下文中创建新Person时,内部Core Data机制会调用getter.

我唯一能想到的就是放弃自动关系生成,并且总是在创建Person的控制器类中显式创建关系,或者在+[Person insertNewPersonInManagedObjectContext:]仅由我的代码调用的方便方法(例如)中创建关系,并始终用于显式创建新Person对象的方法.也许这是最好的解决方案,但我宁愿不必如此严格,只允许使用单个方法来创建托管对象,当我无法控制的其他创建方法和其使用我不能容易检查/排除,存在.首先,它将意味着多个NSArrayController子类来自定义它们创建托管对象的方式.

是否有其他遇到此问题的人提出了一个优雅的解决方案,允许一个NSManagedObject在创建/插入时自动创建关系对象?

macos cocoa core-data objective-c ios

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

osx 10.9.5代码签名V2 - 签署框架:bundle格式不明确

我试图在osx mavericks 10.9.5上使用格式v2对应用程序包进行编码.在之前的测试中,10.9.5(13F12)的签名一切顺利,所有框架都可以无错误地签名.现在,在13F34,框架无法再签名了.当我尝试用第一个框架签名时:

codesign -f -v -s "Developer ID Application: MY AG" "My.app/Contents/Frameworks/4DJavaScript.framework"  
Run Code Online (Sandbox Code Playgroud)

然后发生错误:

My.app/Contents/Frameworks/4DJavaScript.framework: bundle format is ambiguous (could be app or framework)  
Run Code Online (Sandbox Code Playgroud)

当我尝试编码签署框架的唯一版本(A)时,签名成功,但在签署主应用程序时,框架上的错误重新出现.在查看框架的info.plist文件时,(在我看来)是类型集的正确条目:

Bundle OS Type code FMWK  
Run Code Online (Sandbox Code Playgroud)

有关如何在10.9.5-13F34上正确编码签名框架的任何建议?
谢谢,彼得

macos frameworks codesign osx-gatekeeper

10
推荐指数
2
解决办法
3426
查看次数

自动核心数据迁移在Mac OS X 10.5上失败,但在10.6或10.7上失败

我有一个基于NSPersistentDocument的核心数据应用程序,目标是10.5 Leopard及以上版本.我即将发布更新数据模型的更新,因此需要将现有文档迁移到新模型.这些变化相对简单,我为它们创建了一个映射模型.请注意,我不是尝试进行自动轻量级迁移,我确实有一个映射模型(Leopard不支持轻量级迁移,但我的模型更改无论如何都要求它).在我的NSPersistentDocument子类中,我重写-configurePersistentStoreCoordinatorForURL...如下:

- (BOOL)configurePersistentStoreCoordinatorForURL:(NSURL *)url
                                           ofType:(NSString *)fileType
                               modelConfiguration:(NSString *)configuration
                                     storeOptions:(NSDictionary *)storeOptions
                                            error:(NSError **)error
{

    NSMutableDictionary *newOptions = (storeOptions ?
                                       [NSMutableDictionary dictionaryWithDictionary:storeOptions] :
                                       [NSMutableDictionary dictionary]);
    [newOptions setObject:(id)kCFBooleanTrue forKey:NSMigratePersistentStoresAutomaticallyOption];
    return [super configurePersistentStoreCoordinatorForURL:url
                                                     ofType:fileType
                                         modelConfiguration:configuration
                                               storeOptions:newOptions
                                                      error:error];

}
Run Code Online (Sandbox Code Playgroud)

这在10.6和10.7上工作正常.但是,在10.5上,调用[super configurePersistentStore...]抛出异常并失败.错误是:

Error Domain=NSCocoaErrorDomain Code=134020 UserInfo=0x15812d70 "The model configuration used to open the store is incompatible with the one that was used to create the store."
Run Code Online (Sandbox Code Playgroud)

如果我改为手动启动迁移,请使用以下代码:

NSArray *bundles = [NSArray arrayWithObject:[NSBundle mainBundle]];
NSManagedObjectModel *sourceModel = [NSManagedObjectModel mergedModelFromBundles:bundles forStoreMetadata:sourceMetadata];
NSManagedObjectModel …
Run Code Online (Sandbox Code Playgroud)

macos cocoa osx-leopard core-data objective-c

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

INAppStoreWindow标题栏上的NSSplitView分隔符

我正在尝试创建一个类似Reeder/Sparrow的UI来处理我的应用程序的内容.目前我在内部使用带有两个NSView的NSSplitView(左边的那个是内容列表,另一个是右边的"检查器").

我想知道的是如何在标题栏上创建分隔符,它也可以作为分割视图的分隔符.我已经在使用INAppStoreWindow子类了.

有任何想法吗?Thanx提前

macos cocoa objective-c nssplitview inappstorewindow

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

osx中的虚拟串口

我正在使用雪豹.我想创建一个软件串口,它将显示为/ dev/tty ....

我想使用这个虚拟串口从各种程序和IDE中收集数据,如arduino和处理.

谁能告诉我如何做到这一点.我搜索了这个问题,我看过像netfwd这样的软件,但它们只提供串口重定向.

我是osx的新手,之前没有使用过linux.

macos serial-port virtual-serial-port

6
推荐指数
0
解决办法
2387
查看次数

AudioFilePlayer音频单元沙箱是否兼容?

我使用AudioFilePlayer音频单元遇到问题,在OS X 10.8上启用了应用程序沙盒.我有一个只有两个节点的AUGraph,由一个连接到DefaultOutput单元的AudioFilePlayer单元组成.目标(现在)是简单地播放单个音频文件.如果未启用沙盒,则一切正常.如果我启用沙盒,则AUGraphOpen()返回错误-3000(invalidComponentID).如果我从AUGraph中删除文件播放器节点,则错误消失,这至少意味着音频文件播放器导致问题.

这是我用来设置文件播放器节点的代码:

OSStatus AddFileToGraph(AUGraph graph, NSURL *fileURL, AudioFileInfo *outFileInfo, AUNode *outFilePlayerNode)
{
    OSStatus error = noErr;

    if ((error = AudioFileOpenURL((__bridge CFURLRef)fileURL, kAudioFileReadPermission, 0, &outFileInfo->inputFile))) {
        NSLog(@"Could not open audio file at %@ (%ld)", fileURL, (long)error);
        return error;
    }

    // Get the audio data format from the file
    UInt32 propSize = sizeof(outFileInfo->inputFormat);
    if ((error = AudioFileGetProperty(outFileInfo->inputFile, kAudioFilePropertyDataFormat, &propSize, &outFileInfo->inputFormat))) {
        NSLog(@"Couldn't get format of input file %@", fileURL);
        return error;
    }

    // Add AUAudioFilePlayer node
    AudioComponentDescription fileplayercd …
Run Code Online (Sandbox Code Playgroud)

macos cocoa sandbox core-audio audiounit

6
推荐指数
0
解决办法
584
查看次数