小编Mar*_*lio的帖子

获取给定扩展的统一类型标识符

我试图在Cocoa中找到一些方法来从文件扩展名转换为统一类型标识符.也就是说,我想找到一些方法:

".jpg" => "public.jpeg"
".html" => "public.html" 
".ttf"=> "public.truetype-font"
Run Code Online (Sandbox Code Playgroud)

我搜索过NSWorkspace文档但找不到任何内容.我能得到的最接近的是:

- (NSImage *)iconForFileType:(NSString *)fileType
Run Code Online (Sandbox Code Playgroud)

返回文件扩展名的图标,和

– (NSString *)preferredFilenameExtensionForType:(NSString *)typeName
Run Code Online (Sandbox Code Playgroud)

这与我正在尝试的完全相反.你们中的任何人都知道怎么做吗?

我真的希望我不必手动检查很多扩展.

提前致谢.

macos cocoa objective-c uti

19
推荐指数
2
解决办法
6468
查看次数

将整个进程状态存储在磁盘上并在以后恢复?(在Linux/Unix上)

我想知道:是否有系统调用,库,内核模块或命令行工具,我可以用来存储磁盘上正在运行的程序的完整状态?

那就是:我想将进程当前正在使用的内存,页面布局,堆栈,寄存器,线程和文件描述符完全转储到硬盘驱动器上的文件中,并能够在以后无缝地恢复它,就像模拟器"savestate" "或虚拟机"快照".

如果可能的话,我还想拥有程序状态的多个"备份副本",因此如果程序由于某种原因而死,我可以恢复到先前的执行点.

这可能吗?

state store restore process disk

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

重复使用NSFileHandleDataAvailableNotification文件,没有新数据(导致CPU使用率非常高)

我正在尝试NSTask使用Cocoa中的标准错误读取数据waitForDataInBackgroundAndNotify.以下代码确实读取了流,因此它已经部分工作了.

我遇到的问题是,有时NSFileHandleDataAvailableNotification开始重复启动(每秒数千次),根本没有新数据([data length]返回0).然后我的进程开始使用大量CPU,使机器停止运转.你们中的任何人过去曾经打过这样的事吗?提前致谢.

/**
 * Start reading from STDERR
 *
 * @private
 */

- (void)startReadingStandardError {
    NSFileHandle *fileHandle = [_task.standardError fileHandleForReading];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(errorData:)
                                                 name:NSFileHandleDataAvailableNotification
                                               object:fileHandle];
    [fileHandle waitForDataInBackgroundAndNotify];
}

/**
 * Fired whenever new data becomes available on STDERR
 *
 * @private
 */

-(void) errorData: (NSNotification *) notification
{
    NSFileHandle *fileHandle = (NSFileHandle*) [notification object];
    NSData *data = [fileHandle availableData];

    if ([data length]) {
       // consume data
    }

   [fileHandle …
Run Code Online (Sandbox Code Playgroud)

cocoa asynchronous objective-c nstask nsfilehandle

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

NSRunAlertPanel() 在主线程之外?

我在使用可可开发的应用程序中偶然发现了一个问题。我需要做一些处理,并且我在一个单独的线程上进行。我这样做是为了可以使用 NSProgressIndicator 显示进度,而不是挂起主线程。(如果用户愿意,可以取消执行)。

它几乎工作完美,但有一个问题:处理过程会产生大量文件,如果这些文件中的一个或多个已经存在,我想询问用户是否可以在实际执行此操作之前覆盖它们。所以我尝试从处理线程使用 NSRunAlertPanel() 。

有时它会起作用。其他时候,警报面板会闪烁,在我点击它之前无特殊原因关闭,或者根本不出现。所以我认为 NSRunAlertPanel() 可能不是线程安全的,这是由于竞争条件而发生的。

我想知道:除了使用计时器不断轮询处理线程以了解主线程的进度之外,还有什么方法可以解决此问题?

从主线程以外的任何线程使用 GUI 本质上是不安全的吗?

提前致谢。

编辑:我正在按照马克的指示进行操作,但仍然有问题,因为我的 NSAlerts (我现在也在使用)仍然消失。这是我的处理线程。

- (void)doProcess:(id)param
{
    // ...
    [self performSelectorOnMainThread:@selector(askForConfirmation) withObject:nil waitUntilDone:YES];
    // ...
}
Run Code Online (Sandbox Code Playgroud)

然后在我的主线程上:

- (void)askForConfirmation
{
    [[NSAlert alertWithMessageText:@"Test." defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"Testing."] runModal];
}

- (IBAction)startProcessing:(id)sender
{
    // ...
    [NSThread detachNewThreadSelector:@selector(doProcess:) toTarget:self withObject:nil];
    // ...
}
Run Code Online (Sandbox Code Playgroud)

cocoa multithreading objective-c

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

在git上合并主题分支,删除所有主题分支的提交历史记录?

我想知道git中是否有以下内容:

假设我有以下历史:

A---B---C---D---E  master
         \
          W---X---Y  topic
Run Code Online (Sandbox Code Playgroud)

我想将主题分支中所做的所有更改合并回master,但不保留提交历史记录.也就是说,而不是:

A---B---C---D---E---F  master
         \         /
          W---X---Y  topic
Run Code Online (Sandbox Code Playgroud)

我想有以下历史:

A---B---C---D---E---F  master
Run Code Online (Sandbox Code Playgroud)

F被新的主分支,它等效于提交所做的修改提交W,X,Y,应用的一次.

我还希望能够保持主题分支的完整性:

A---B---C---D---E---F  master
         \         
          W---X---Y  topic
Run Code Online (Sandbox Code Playgroud)

这可能吗?我一直在使用git rebase进行一些测试,但到目前为止它还没有按照我需要的方式运行.

提前致谢.

git branch

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