小编Nir*_*att的帖子

iOS GCD:任何全局队列和具有后台优先级的队列(DISPATCH_QUEUE_PRIORITY_BACKGROUND)之间的差异?

我正在阅读并发编程指南,事情让我很困惑.

我看到很多代码为任何后台任务调用以下代码:

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
Run Code Online (Sandbox Code Playgroud)

现在我所说的'背景'是流行的含义:

在主(UI)线程以外的任何地方执行的操作

因此,遵循文档,上面的语句返回任何具有不同优先级的非主线程队列.

我的问题是 - 为什么会DISPATCH_QUEUE_PRIORITY_BACKGROUND存在?最近我还看到许多异步任务DISPATCH_QUEUE_PRIORITY_BACKGROUND专门用于执行后台任务.

如果返回使用队列DISPATCH_QUEUE_PRIORITY_DEFAULT,是不是返回队列,DISPATCH_QUEUE_PRIORITY_LOW或者DISPATCH_QUEUE_PRIORITY_HIGH远离主线程运行dispatch_get_global_queue

他们不是背景队列吗?队列返回的具体目的是什么DISPATCH_QUEUE_PRIORITY_BACKGROUND?我已经提到了这一点,但除了我上面提到的流行意义之外,它没有说明多少.

我确信我对语言很困惑 - 背景和背景队列.如果有人可以解释(更好,图形化) - 将是一个很大的帮助.

concurrency cocoa multithreading grand-central-dispatch ios

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

iOS开发人员计划证书转移

我的开发人员证书和个人资料有些问题.我的办公室Mac上有开发人员计划证书.我想在家里的设备上开发和测试应用程序,所以我添加了我的设备并从办公室Mac生成了配置文件.在我的家用Mac上下载并安装*.cer和配置,但是我看到了错误:

The identity 'iPhone Developer' doesn't match any valid, non-expired certificate/private key pair in your keychains
Run Code Online (Sandbox Code Playgroud)

如何将密钥从办公室Mac转移到我的家用Mac?

xcode objective-c ios provisioning-profile swift

30
推荐指数
2
解决办法
2万
查看次数

loadNibNamed如何工作?UIView出口没有使用loadNibNamed进行初始化

我知道这是非常直接的,但是经过太多的拉毛后,我无法解决问题.

我看过教程解释如何使用XIB和所有创建视图.但它们都没有解决我在这里的情况.

我有一个XIB文件,一个自定义的UIView子类,它有很少的标签和按钮.UIView子类是可重用的,这就是我不能在任何单个View控制器中安装插座的原因.因此,我将此视图的各个控件(子视图)存储在我的自定义UIView本身中.这是合乎逻辑的,因为没有视图控制器应该拥有此自定义视图的子视图,该视图将包含在每个视图控制器中.

问题是,我不知道如何完全初始化整个UI.

这是我的UIView子类的代码:

@interface MCPTGenericView : UIView

+(id)createInstance : (bool) bPortrait;

@property (weak, nonatomic) IBOutlet UIView *topView;
@property (weak, nonatomic) IBOutlet UIView *titleView;
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
@property (weak, nonatomic) IBOutlet UIButton *logoButton;
@property (weak, nonatomic) IBOutlet UITextField *searchTextField;
@property (weak, nonatomic) IBOutlet UIButton *menuButton;
@end
Run Code Online (Sandbox Code Playgroud)

后来,我也计划将这个相同的XIB文件用于这个UIView的横向,我计划在同一个XIB中使用相同的上面的出口和横向控制.

以下是实施:

@implementation MCPTGenericView
//@synthesize topView, titleLabel, titleView;

+(id)createInstance : (bool) bPortrait
{
    UIView * topLevelView = nil;
    MCPTGenericView * instance = [MCPTGenericView new];
    NSArray * views = [[NSBundle mainBundle] …
Run Code Online (Sandbox Code Playgroud)

iphone xib uiview ios loadnibnamed

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

iOS:isMovingToParentViewController未按预期工作

我的设置很简单,我的问题不是来自非常不同的这一个.但是为了更好地解释它我在这里发布:

NavController -> VC1 -> VC2
Run Code Online (Sandbox Code Playgroud)

VC1是NavController的根视图控制器.VC2可通过VC1的Push segue访问.

我想在VC1中检测是否:

它直接作为根视图控制器出现(通过Push)它是由于VC2被弹出而出现的

我阅读的文档说下面应该告诉我以后是否属实.

isMovingToParentViewController == NO 
Run Code Online (Sandbox Code Playgroud)

然而事实并非如此,并且上述情况总是证明是正确的.这意味着,(self.isMovingToParentViewController == NO)总是在发生.

这是我的代码:

- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.navigationController.navigationBarHidden = YES;

    //pushed to stack
    if (self.isMovingToParentViewController == YES)
    {
        //First time
      }
    else
    //popped off
    {
        //via Pop from VC2
    }    
}
Run Code Online (Sandbox Code Playgroud)

viewDidAppear的情况也是如此.

事实上检查,我在开始时放置断点,并在两种情况下检查以下所有都是FALSE:

([self isMovingFromParentViewController])
([self isMovingToParentViewController])
([self isBeingPresented])
([self isBeingDismissed])
Run Code Online (Sandbox Code Playgroud)

怎么了?我的故事板里有什么东西可以搞定吗?请帮忙...

uinavigationcontroller popviewcontroller pushviewcontroller ios

9
推荐指数
2
解决办法
5999
查看次数

FBDialogs presentShareDialogWithParams回调处理程序永远不会被调用

我正在使用FBDialogs在Facebook上分享.

Facebook共享工作正常,但处理程序永远不会被调用(我在第一行放置断点)

我的SDK是通过CocoaPods安装的

pod 'Facebook-iOS-SDK',         '3.9.0'
Run Code Online (Sandbox Code Playgroud)

这是代码,几乎是facebook开发页面上的例子.我正在使用ios7测试iPod.

// If the Facebook app is installed and we can present the share dialog
if ([FBDialogs canPresentShareDialogWithParams:params]) {
    // Present the share dialog

    [FBDialogs presentShareDialogWithParams:params
                              clientState:nil
                                    handler:^(FBAppCall *call, NSDictionary *results, NSError *error) {
                                        //never gets here
                                        if(error) {
                                            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                                                            message:[NSString stringWithFormat: @"O comparilhando não foi bem sucedido. %@",error.description]
                                                                                           delegate:nil
                                                                                  cancelButtonTitle:@"OK"
                                                                                  otherButtonTitles:nil];
                                            [alert show];

                                        } else {
                                            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sucesso"
                                                                                            message:@"O compartilhando foi bem sucedido"
                                                                                           delegate:nil …
Run Code Online (Sandbox Code Playgroud)

sdk facebook callback handler ios

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

UITableView部分标题在导航栏下爬行

由于导航栏样式是半透明的,我将第一部分标题(部分#0)隐藏在我的导航栏下.

我知道之前已经问过这个问题,并且要解决这个问题:

 self.navController.navigationBar.translucent = YES;
Run Code Online (Sandbox Code Playgroud)

这会使问题视图正确 - 部分标题出现在导航栏下方而不是隐藏在它后面,这就是我想要的.

但是,这会使我的其他视图设计无效,并在我的导航栏下方留下所有空间中的额外空格.

如何在正确的位置获取节标题?

uinavigationbar uitableview sectionheader translucency

7
推荐指数
2
解决办法
2万
查看次数

面向协议的编程是否带来了与继承主要解决的代码重复相同的旧问题?

概观

我试图了解Swift的面向协议编程范例.根据Apple的WWDC 2015视频https://developer.apple.com/videos/play/wwdc2015/408/协议可以实现继承所能实现的一切,并且还解决了继承的根本问题.

虽然协议通过将每个功能(功能)捕获为协议并允许类/结构确认多个协议来解决多重继承的问题,但我认为协议永远不能替代继承,原因如下.

让我们假设我正在实施学院/学校自动化软件,并且有两个实体,工作人员和校长,我们假设他们都上课但是校长以及课程控制员工.

所以我创建了一个协议,它将模拟正在上课的常用功能.所以让我们创建一个协议.

protocol staffProtocol {
    var classHour : Int { get set}
    var numberOfClass : Int? { get set }

    mutating func doesWork()
}

extension staffProtocol {
    mutating func doesWork(){
        classHour = 9
        numberOfClass = 4
        print("Takes calss")
    }
}
Run Code Online (Sandbox Code Playgroud)

由于Take class是工作人员和校长的共同任务所以我提供了一个默认扩展,它提供了一个实现,doesWork()并说类需要.

现在让我们编写一个Staff结构,它将向staffProtocol确认,

struct Staff : staffProtocol {
        var classHour: Int = 0
        var numberOfClass: Int? = 0
    }
Run Code Online (Sandbox Code Playgroud)

现在,如果我创建一个staff对象

var staff = Staff()
staff.doesWork()
Run Code Online (Sandbox Code Playgroud)

一切都运行得很好,现在让我们创建一个Principal结构,它也将扩展staffProtocol,

struct Principal : staffProtocol {
    var …
Run Code Online (Sandbox Code Playgroud)

inheritance protocols ios swift

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

iOS应用程序无法及时启动0x000000008badf00d - 在applicationDidBecomeActive中延迟

我把完整didFinishLaunchingWithOptions的代码放在这里:

 [UIApplication sharedApplication].idleTimerDisabled = YES;
 m_bDataLoadingNeeded = YES;
 return YES;
Run Code Online (Sandbox Code Playgroud)

结果,我不得不进行关键的初始化applicationDidBecomeActive.然而,我得到了上述错误.

我得到的所有参考文献都提到了didFinishLaunchingWithOptions我已经完成的更快完成.需要检查applicationDidBecomeActive吗?

我的崩溃日志就在这里(不知何故,我无法用所有dsym和app来代表它,所以我不知道哪个语句是确切的罪魁祸首.但是每个人都可以看到它绝对不是didFinishLaunchingWithOptions)

Exception Type:  00000020
Exception Codes: 0x000000008badf00d
Highlighted Thread:  0

Application Specific Information:
<MyBundleID> failed to launch in time

Elapsed total CPU time (seconds): 1.600 (user 1.600, system 0.000), 4% CPU 
Elapsed application CPU time (seconds): 0.438, 1% CPU

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0:
0   libsystem_kernel.dylib          0x3c66f0fc 0x3c65e000 + 69884
1   libsystem_c.dylib               0x3c5b8124 0x3c5b7000 + …
Run Code Online (Sandbox Code Playgroud)

iphone multithreading initialization ios appdelegate

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

用于实时交通数据的 iOS API(如 geoloqi 和 Waze)

我一直在访问一些服务 API 网站,但找不到我要查找的内容。我的问题更多的是针对使用哪些资源,而不是具体应该如何完成。

我的 iPhone 应用程序要求是能够跟踪附近、正在通勤的用户并在地图上找到他们。额外的要求可能是给他们发短信、打电话、与他们进行视频会话等。在较高的层面上,这将转换为如下内容:

  • 根据经纬度获取用户详细信息
  • 了解他们是否是所订阅服务的注册用户
  • 向用户发送消息
  • 使用 iPhone 电话 API 或专用应用程序会话呼叫用户
  • 视频电话

位智就是其中之一。虽然它是开源的,但关于如何将其用作实时交通数据后端的文档却相当少。

还有这个Geoloqi,它是付费的,但是有iOS SDK以及丰富的API。然而,当我查找上面列出的要求时,我找不到对我有用的部分。我相信肯定有很多应用程序已经依赖这样一个有用的服务。如果其中任何一个是开源/教程,那么对于我来说,对于 geoloqi 的可行性来说,这将是最有用的资源。Geoloqi 还向使用其 api 的用户收费,因此对我来说了解哪些功能以什么价格提供也很重要。

sdk gps ios

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

用于OCR的iOS UIImage二值化 - 处理具有不同亮度的图像

我有一个C++二值化例程,我用于以后的OCR操作.但是我发现它产生了不必要的文本倾斜.寻找替代方案我发现GPUImage具有很高的价值,它解决了倾斜的问题.

我正在使用这样的GPUImage代码在应用OCR之前对输入图像进行二值化.

但是,阈值不包括我得到的图像范围.查看输入图像中的两个样本:

在此输入图像描述

在此输入图像描述

我不能用相同的阈值处理两者.低价值似乎随后很好,第一个价值更高.

第二个图像似乎特别复杂,因为无论我为阈值设置了什么值,我都不会将所有字符都正确地二进制化.另一方面,我的C++二值化例程似乎做得对,但我没有太多的见解可以像GPUImage中的简单阈值那样进行实验.

我该怎么处理?

更新:

我尝试使用GPUImageAverageLuminanceThresholdFilter默认乘数= 1.它适用于第一张图像,但第二张图像仍然是问题.

二值化的一些更多样化的输入:

在此输入图像描述

在此输入图像描述

更新II:

经过布拉德的这个回答后,尝试过GPUImageAdaptiveThresholdFilter(也包含了GPUImagePicture,因为之前我只在UIImage上应用它).

有了这个,我得到了二次图像二值化完美.然而,当我设置模糊大小为3.0时,第一个似乎在二值化后有很多噪音.OCR导致添加额外字符.使用较低的模糊大小值,第二个图像会失去精度.

这里是:

+(UIImage *)binarize : (UIImage *) sourceImage
{
    UIImage * grayScaledImg = [self toGrayscale:sourceImage];
    GPUImagePicture *imageSource = [[GPUImagePicture alloc] initWithImage:grayScaledImg];
    GPUImageAdaptiveThresholdFilter *stillImageFilter = [[GPUImageAdaptiveThresholdFilter alloc] init];
    stillImageFilter.blurSize = 3.0;    

    [imageSource addTarget:stillImageFilter];   
    [imageSource processImage];        

    UIImage *imageWithAppliedThreshold = [stillImageFilter imageFromCurrentlyProcessedOutput];
  //  UIImage *destImage = [thresholdFilter imageByFilteringImage:grayScaledImg];
    return imageWithAppliedThreshold;
}
Run Code Online (Sandbox Code Playgroud)

ocr image-processing ios gpuimage

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