我正在阅读并发编程指南,事情让我很困惑.
我看到很多代码为任何后台任务调用以下代码:
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
?我已经提到了这一点,但除了我上面提到的流行意义之外,它没有说明多少.
我确信我对语言很困惑 - 背景和背景队列.如果有人可以解释(更好,图形化) - 将是一个很大的帮助.
我的开发人员证书和个人资料有些问题.我的办公室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?
我知道这是非常直接的,但是经过太多的拉毛后,我无法解决问题.
我看过教程解释如何使用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) 我的设置很简单,我的问题不是来自非常不同的这一个.但是为了更好地解释它我在这里发布:
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
我正在使用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) 由于导航栏样式是半透明的,我将第一部分标题(部分#0)隐藏在我的导航栏下.
我知道之前已经问过这个问题,并且要解决这个问题:
self.navController.navigationBar.translucent = YES;
Run Code Online (Sandbox Code Playgroud)
这会使问题视图正确 - 部分标题出现在导航栏下方而不是隐藏在它后面,这就是我想要的.
但是,这会使我的其他视图设计无效,并在我的导航栏下方留下所有空间中的额外空格.
如何在正确的位置获取节标题?
概观
我试图了解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) 我把完整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) 我一直在访问一些服务 API 网站,但找不到我要查找的内容。我的问题更多的是针对使用哪些资源,而不是具体应该如何完成。
我的 iPhone 应用程序要求是能够跟踪附近、正在通勤的用户并在地图上找到他们。额外的要求可能是给他们发短信、打电话、与他们进行视频会话等。在较高的层面上,这将转换为如下内容:
位智就是其中之一。虽然它是开源的,但关于如何将其用作实时交通数据后端的文档却相当少。
还有这个Geoloqi,它是付费的,但是有iOS SDK以及丰富的API。然而,当我查找上面列出的要求时,我找不到对我有用的部分。我相信肯定有很多应用程序已经依赖这样一个有用的服务。如果其中任何一个是开源/教程,那么对于我来说,对于 geoloqi 的可行性来说,这将是最有用的资源。Geoloqi 还向使用其 api 的用户收费,因此对我来说了解哪些功能以什么价格提供也很重要。
我有一个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) ios ×9
iphone ×2
sdk ×2
swift ×2
appdelegate ×1
callback ×1
cocoa ×1
concurrency ×1
facebook ×1
gps ×1
gpuimage ×1
handler ×1
inheritance ×1
loadnibnamed ×1
objective-c ×1
ocr ×1
protocols ×1
translucency ×1
uitableview ×1
uiview ×1
xcode ×1
xib ×1