小编Gru*_*kes的帖子

使用startMonitoringForRegion可以监视的最大区域数是多少:region desiredAccuracy:accuracy?

该文件说,可监测的区域数量有限 -

(void)startMonitoringForRegion:(CLRegion *)region desiredAccuracy:(CLLocationAccuracy)accuracy
Run Code Online (Sandbox Code Playgroud)

但我找不到那个限制,有人知道吗?

iphone core-location cllocationmanager ios

12
推荐指数
1
解决办法
4678
查看次数

是否可以确定SIM /电话号码是否已更改?

我们有一个产品,用户通过提供他们的电话号码进行注册.

然而,他们注册后,他们可能会改变他们的SIM卡.

是否可以以编程方式确定SIM卡是否已被移除或插入?

(如果你提供它,谢谢,但是首先使用电话号码的任何题外话都与这个讨论无关,我不想讨论事情的这个方面,只讨论sim方面).

sim-card ios core-telephony

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

在故事板中而不是以编程方式自定义表视图节标题?

我想自定义静态表的表视图节头,这可以通过编程方式完成(如何自定义tableView节视图 - iPhone).

但是有没有一种方法可以在故事板中以图形方式显示标题视图并设计其布局?

(如果不是,我可以使用.xib来保存视图,但在实际表中的故事板中使用它会更方便)

同样适用于主表头.

cocoa-touch ios

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

在框架中覆盖故事板中的图像

我有一个框架,其中包含一个故事板和一组默认图像.该框架可以包含在多个应用程序中,目的是如果需要,应用程序可以使用自己的变体覆盖无,部分或全部默认图像.

我面临的问题是我没有找到适用于所有场景的解决方案,例如:如果框架包含一个名为Person的图像,那么框架由app A使用,它提供了自己的Person版本,以及框架由应用程序B使用,它不提供自己的Person版本然后:

如果框架使用以下代码设置图像:

let image = UIImage.init(named: "Person")
someImageView.image = image
Run Code Online (Sandbox Code Playgroud)

然后,当app A运行时,会找到并正确显示Person图像的变体.(App A在其资产目录中有Person的变体)但是,当app B运行时,不会显示任何内容.

另一方面,如果我没有使用代码设置图像(即它在故事板图像视图的Xcode属性检查器中设置),那么当运行应用程序B时,现在正确显示默认框架图像,但现在应用程序A的自定义人员图像不显示.

有没有办法可以成功地涵盖这三种情况:

一个默认图像在框架中,应用程序A和应用程序B都不希望用它们的自定义图像覆盖它,默认图像在框架中,而应用程序A想要覆盖它,但应用程序B却没有.框架中有一个默认图像,app A和app B都希望用自己的变体覆盖它.(我有一个大型的故事板,框架中有几十个图像,理想情况下我希望有一个完全不涉及代码的解决方案 - 即默认图像名称是通过Xcode的属性检查器为图像视图设置的,如果是应用程序在其资产目录中提供自己的图像版本,自动显示图像)

objective-c ios swift ios-app-extension ios10

12
推荐指数
1
解决办法
718
查看次数

cancelPreviousPerformRequestsWithTarget不取消未完成的performSelector:withDelay

我正在使用a UIWebView并且不希望导航栏出现,除非用户点击屏幕上不是链接的任何地方.所以我有这段代码在延迟后显示导航栏:

- (void)handleTapGesture:(UITapGestureRecognizer *)sender  
{      
.... 
[self performSelector:@selector(showNavigationBar) withObject:self afterDelay:0.2]; 
}
Run Code Online (Sandbox Code Playgroud)

调用showNavigationBartap处理程序时我没有立即调用,因为用户可能已经点击了链接,在这种情况下,之前 调用了轻击手UIWebView shouldStartLoadWithRequest,所以如果我隐藏导航栏,shouldStartLoadWithRequest它会瞬间闪现在屏幕上.所以我把它设置为在延迟之后显示,这给了下面代码在其中执行的时间shouldStartLoadWithRequest(如果用户没有点击链接shouldStartLoadWithRequest没有被调用并且显示导航栏,那么在那种情况下应该如此) ).

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType  
{ 
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showNavigationBar) object:nil];
...
Run Code Online (Sandbox Code Playgroud)

但是这不起作用,我已经将延迟时间增加到几秒钟并且可以确认cancelPreviousPerformRequestWithTarget在显示导航栏之前调用,但是当指定的时间过去时,显示条形图.cancelPreviousPerformRequestWithTarget没有效果.

有谁知道它为什么不起作用?

ios

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

调用[super viewWillAppear] [super viewDidLoad]等的正确顺序是什么?

当提供的实现viewWillAppear,viewDidLoad,viewDidAppear,loadView等.

是否应该在执行自定义操作之前或之后调用超类对应的方法?

如果以错误的顺序执行会有什么可能的后果?

它应该是:

- (void)viewWillAppear:(BOOL)animated
{    
    [super viewWillAppear:animated];
    stuff
}
Run Code Online (Sandbox Code Playgroud)

要么

- (void)viewWillAppear:(BOOL)animated
{    
    stuff
    [super viewWillAppear:animated];
}
Run Code Online (Sandbox Code Playgroud)

等等

objective-c ios

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

NSFileManager:enumeratorAtURL:向NSFileManager返回不同形式的URL:URLForDirectory

如果我使用NSFileManager:URLForDirectory那时获取沙盒的Application Support目录,那么我将返回以下URL:

file://localhost/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application%20Support/
Run Code Online (Sandbox Code Playgroud)

但是,如果我NSFileManager:enumeratorAtURL用来搜索目录,我会获取表单的URL:

file://localhost/private/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application%20Support/
Run Code Online (Sandbox Code Playgroud)

这引起了我的问题,因为我正在进行URL搜索/替换操作,差异导致不匹配.我碰到的这种差异的其它地方之前,然后我的解决方案是使用的URL(使用的路径NSURL:path)而不是原始网址,但这不会在这种情况下,作为工作产生的路径是:

/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application Support
/private/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application Support/
Run Code Online (Sandbox Code Playgroud)

我想要做的是:我的Application Support目录中可以有相同名称但位置不同的任意数量的文件,我需要提取相对于Application Support目录的路径.即如果我有以下内容

/Application Support/abc/file.dat
/ApplicationSupport/abc/def/file.dat
Run Code Online (Sandbox Code Playgroud)

我希望能够提取"abc"和"abc/def".我使用以下代码执行此操作:

NSArray *keys = [NSArray arrayWithObject:NSURLIsRegularFileKey];
NSDirectoryEnumerator *dirEnumerator = [self.fileManager enumeratorAtURL:[MyManager appSupportDirectory]
                                          includingPropertiesForKeys:keys
                                                             options:NSDirectoryEnumerationSkipsHiddenFiles
                                                        errorHandler:nil];
    for (NSURL *url in dirEnumerator)
    {
        if ( NSOrderedSame == [[url lastPathComponent] caseInsensitiveCompare:kFilename])
        {
            NSString *appSupportPath = [[MyManager appSupportDirectory] path];
            NSString *pathToFile = [url path];
            pathToFile = [pathToFile URLByDeletingLastPathComponent];
            NSString *subPath = [pathToFile  stringByReplacingOccurrencesOfString:appSupportPath withString:@""];
Run Code Online (Sandbox Code Playgroud)

(MyManager:appSupportDirectory调用NSFileManager:URLForDirectory:使用NSApplicationSupportDirectory)

这在模拟器上工作正常,enumeratorAtURL:URLFOrDirectory:返回相同的路径,但由于它们在硬件上的差异,它会失败.

有没有办法获得enumeratorAtURL: …

cocoa-touch nsfilemanager ios

11
推荐指数
2
解决办法
2382
查看次数

Navita TEM应用程序如何获取通话记录信息?

Navita https://itunes.apple.com/us/app/navita-tem-personal/id590228620?mt=8如何 设法显示通话记录?

如果我将应用程序从任务管理器中滑出,那么它会错过调用,这表明它必须使用CTCallCenter的callEventHandler,并通过保存响应callEventHandler回调的时间/持续时间来创建自己的调用日志.

但是,如果是这种情况,那么它如何设法在后台执行此操作?我的印象是callEventHandler只能被前景中的应用程序使用而不能被后台使用?

该应用程序正在使用位置服务,但即使在禁用此功能后,它仍然可以获取有关呼叫的信息(前提是应用程序未被暂停).我虽然可能正在使用后台位置更新来保持自己准备接收callEventHandler回调但显然不是.

Navita应用程序还能够显示通话时间和通话时长.

赏金将被授予一个答案,其中包含足够,准确和详细的信息,使我能够模仿Navita应用程序的行为,特别是我必须能够编写一个应用程序,可以获得发生的电话呼叫的时间和持续时间虽然应用程序不在前台,但设备的位置服务已关闭,并且应用程序在后台运行的时间超过了使用beginBackgroundTaskWithExpirationHandler授予的~3分钟:

   Here is what I observe with the Navita app that I want to be able to reproduce:

1) Run app
2) Task away from app
3) Go to device settings, privacy, and turn off Location Services.
4) Go to device settings, privacy, background app refresh and turn off for the app
5) Wait > 10 minutes to make sure the app is not still in the background as a consequence of …
Run Code Online (Sandbox Code Playgroud)

ios core-telephony

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

由于应用onCreate()多次调用,M上但不是L上的静态变量重新初始化

我有一个应用程序,它有一个派生自Application类的类,并注意到它的onCreate()方法被多次调用.除此之外,每次调用onCreate()时,都会重置其静态变量的值.

此行为仅发生在男,它不属我想如果要找出M或错误在并购预期的变化发生,或有与应用程序体系结构的一些基本固有的问题已沉睡,只有现在表现为M.

只要调用广播接收器的onReceive(),就会调用Application派生类的onCreate().未创建Application类的多个实例 - 在同一对象实例上调用onCreate(),并且始终存在相同的应用程序上下文.

以下是一些代码片段,展示了这一观察结果:

public class MyApplication extends Application
{
    public static int debugVal = 5;

    public MyApplication ()
    {
        theApp = this;
    }

    public void onCreate ()
    {
        Log.v(TAG, "++++++++++++ onCreate() debugVal: " + debugVal);
        debugVal = 10;
        ....



public class MyBroadcastReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive (Context context, Intent intent)
    {
    Log.v(TAG, "onReceive. debugVal: " + MyApplication.debugVal);
    ...
Run Code Online (Sandbox Code Playgroud)

在Marshmallow上运行时,logcat输出为:

831-1412/? I/ActivityManager Start proc 2244:com.company.redacted/u0a86 for broadcast com.company.redacted/com.company.redacted2.MyBroadcastReceiver
2244-2244/? V/MyApplication: ++++++++++ onCreate() debugVal: 5
2244-2244/? …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-6.0-marshmallow

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

如何使用Swift 2.0声明递归枚举

我正在尝试在Swift 2中尝试递归枚举,但是我遇到了编译错误.

我开始试图定义我自己的例子:

enum Tree {
    case Empty
    indirect case Node(value: Int, left: Tree, right: Tree)
}
Run Code Online (Sandbox Code Playgroud)

但是得到一个错误:"一行上的连续声明必须用:"分隔.

所以,我从他们的WWDC15尝试了Apple自己的例子.Swift 演示中的新功能:

enum Tree<T> {
  case Leaf(T)
  indirect case Node(Tree, Tree) 
}
Run Code Online (Sandbox Code Playgroud)

但它也与此相同的编译错误.如果我创建一个新的游乐场并粘贴这些行,则会导致错误 - 请参阅屏幕截图,或者如果在Xcode项目中同样的话,请参阅其他截图.

我正在使用Xcode 7.0.

为什么我甚至无法获得Apple的编译示例?

在此输入图像描述 在此输入图像描述

xcode ios swift swift2

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