小编Mic*_*uba的帖子

如何防止状态栏与UINavigationController上设置的hidesBarsOnSwipe重叠内容?

我正在尝试使用iOS 8中添加的新功能 - 在用户滚动表格视图时隐藏导航栏(类似于移动Safari的功能).我设置的财产hidesBarsOnSwipeUINavigationController,以YESviewDidAppear的方法UITableViewController:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    if([self.navigationController respondsToSelector:@selector(hidesBarsOnSwipe)]) {
        self.navigationController.hidesBarsOnSwipe = YES;
    }
}
Run Code Online (Sandbox Code Playgroud)

滚动视图时,导航栏会隐藏.到现在为止还挺好.但状态栏仍然可见,我的表视图内容通过它显示,看起来很丑:

在此输入图像描述

我试着设置edgesForExtendedLayoutUIEdgeRectNone或调节contentInset表视图,但它并没有帮助.是否有任何其他解决方案可以隐藏状态栏和导航栏,或使其不透明?

objective-c uinavigationbar uinavigationcontroller ios ios8

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

preferredInterfaceOrientationForPresentation必须返回支持的接口方向

此错误没有意义,因为UIInterfaceOrientationLandscapeRight支持的方向返回首选方向

//iOS6

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return (UIInterfaceOrientationLandscapeRight | UIInterfaceOrientationLandscapeLeft);
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeRight;
}
Run Code Online (Sandbox Code Playgroud)

错误:

由于未捕获的异常'UIApplicationInvalidInterfaceOrientation'而终止应用程序,原因是:'preferredInterfaceOrientationForPresentation必须返回支持的接口方向!'

cocoa ios ios6

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

Apple手表模拟器问题

我想在苹果手表模拟器上调试和运行应用程序.我试过通过使用不同的目标通知,Glance和Watch应用程序,但苹果模拟器没有显示任何东西..它卡在等待附加过程的扩展.我只看到Apple Watch Simulator的黑屏.

我做错了什么?

如何克服这个问题?

在此输入图像描述

xcode ios apple-watch watchkit

18
推荐指数
3
解决办法
7701
查看次数

我可以创建一个没有故事板的WatchKit应用程序(完全在代码中)吗?

我的团队目前正在开发一个iOS应用程序,我们根本不使用故事板.我们在代码中创建UI.因此,为了保持一致性,如果我们可以完全在代码中创建Watch App目标,那就太棒了.

但是,"WatchKit入门"视频和WatchKit框架参考都 提到您需要Watch App目标的故事板.此外,在WKInterfaceObject.hinit方法中标记为不可用:

- (instancetype)init NS_UNAVAILABLE;
Run Code Online (Sandbox Code Playgroud)

那么在不使用故事板的情况下创建Watch App真的不可能吗?如果是这样,这个决定背后的原因是什么?我的意思是,我们可以完全用代码创建一个iPhone/iPad应用程序,那么为什么Watch会有所不同呢?

objective-c ios uistoryboard watchkit

16
推荐指数
1
解决办法
2742
查看次数

推送通知令牌在单个设备的所有应用中都是唯一的吗?

我将在应用程序商店和1个城市飞艇帐户上有多个应用程序,以向所有这些设备发送推送通知.我想知道的是,每个Apple设备是否在所有应用程序中都具有相同的"推送令牌"?这更像是一个数据库体系结构的东西,所以如果一个设备使用我的许多应用程序,我就不会多次复制推送令牌.

如果每个Apple设备为其安装的每个应用程序生成一个唯一的推送令牌,我的架构需要更改.

iphone push-notification apple-push-notifications

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

iOS 7 CoreBluetooth retrievePeripheralsWithIdentifiers未检索

我有一个问题是将我的CoreBluetooth代码从iOS 6更新到iOS 7.我可以扫描外围设备并建立连接,但是,我无法使用iOS 7中提供的新CoreBluetooth方法重新连接外围设备.这里是一个看看我是如何尝试完成重新连接的:

- (void)retrievePeripheral:(NSString *)uuidString
{

NSUUID *nsUUID = [[NSUUID UUID] initWithUUIDString:uuidString];

if(nsUUID)
{        
    NSArray *peripheralArray = [centralManager retrievePeripheralsWithIdentifiers:@[nsUUID]];

    // Check for known Peripherals
    if([peripheralArray count] > 0)
    {
        for(CBPeripheral *peripheral in peripheralArray)
        {
            NSLog(@"Connecting to Peripheral - %@", peripheral);

            [self connectPeripheral:peripheral];
        }
    }
    // There are no known Peripherals so we check for connected Peripherals if any
    else
    {
        CBUUID *cbUUID = [CBUUID UUIDWithNSUUID:nsUUID];

        NSArray *connectedPeripheralArray = [centralManager retrieveConnectedPeripheralsWithServices:@[cbUUID]];

        // If there are connected Peripherals
        if([connectedPeripheralArray count] …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c ipad core-bluetooth ios7

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

比较NSIndexPath的行和NSArray计数时,是否有更好的方法来避免“符号比较”警告?

我在XCode中为我的iOS项目打开了“签名比较”(又名-Wsign-compare)警告(令人惊讶的是,默认情况下它处于关闭状态)。之后,出现了许多这样的警告:

/Users/michalciuba/projects/GlobeMobile/Classes/ACMailController.m:86:19: Comparison of integers of different signs: 'NSInteger' (aka 'long') and 'NSUInteger' (aka 'unsigned long')
Run Code Online (Sandbox Code Playgroud)

它们通常通过比较造成row的财产NSIndexPathNSInteger由“计数”的方法的返回值NSArray,如下所示:

if(indexPath.row < [self.myDataArray count]) 
Run Code Online (Sandbox Code Playgroud)

可以通过强制转换来简单地解决警告:

if(indexPath.row < (NSInteger)[self.myDataArray count]) 
Run Code Online (Sandbox Code Playgroud)

但是,如果要比较每个地方的值,则必须这样做。他们正在数十个地方进行比较。我想知道是否有更好,更聪明的方法来解决这个问题?我不想关闭此警告,因为它可能有助于防止出现无符号整数下溢之类的问题。

objective-c clang nsinteger nsuinteger ios

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

iOS CoreBluetooth:状态保存和恢复

希望在这里得到一些意见.

在我目前的iOS项目中,我使用的是带有swift的CoreBluetooth.该应用程序可以在后台使用CoreBluetooth进行通信,基本上可以正常工作.外围设备需要与iOS设备建立活动连接才能按预期工作.只要连接中断,外围设备就会停止当前操作.当应用程序因内存压力而关闭时,也会发生这种情况.在这种情况下,外围设备不应停止工作,因此存在问题.为了解决这个问题,我按照苹果核心蓝牙编程指南实现了状态保存和恢复后台模式,主要说:

  1. 使用恢复标识符初始化CentralManager.代表=自我.
  2. 实现willRestoreState委托方法.NSLog的东西
  3. 检查特殊键的launchOptions.NSLog的东西.

我强制iOS使用这个常见项目在后台关闭应用程序:BackgroundKill.当然应用程序不再以调试模式运行,这就是为什么我在重要的位置添加一些NSLog语句以在设备控制台中查找.好消息:当应用程序终止时,连接不再被取消,iOS现在按预期运行以保持连接,因此外围设备不会停止工作.罢工!除了应用程序订阅的电池服务之外,在此期间中央和外围设备之间没有通信.建立有效连接的唯一原因是防止外围设备停止工作.

现在手动重新启动应用程序时,没有提到的NSLogs出现.永远不会调用willRestoreState委托,并且launchOptions为nil.我在实例化CentralManager时尝试使用队列"DISPATCH_QUEUE_CONCURRENT"而不是nil.没有效果.

在重新启动应用程序时,我应该如何使用保留的连接?为什么从不调用willRestoreState委托?我在这里错过了什么吗?为了使用状态保存和恢复,是否必须在系统后台/强制关闭时接收数据?

谢谢你的帮助.:)

iphone ios core-bluetooth bluetooth-lowenergy swift

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

CoreData设置关系给出错误' - [WeatherObservation count]:发送到实例的无法识别的选择器

WeatherObservation我是数据模型中的一个实体,我试图将它与另一个Object(一对一)的关系设置为我通过导航控制器传递的.几个星期前就有用了.我更改了模型中的一些其他实体,重新生成了类,并将此关系设置为NSManagedObject,而不是另一个实体的类.我尝试重新生成这个类几次,然后将其更改为应该是什么,并将类添加到.h,#import到.m

我假设[MANAGEDOBJECT count]消息是核心数据魔法的一部分,我不会在我的代码中的任何地方调用它.我不知道从哪里开始,该怎么做,我可以在这里发布什么来帮助得到答案?我试过了:

weather.hiveObservation = hiveObs;
Run Code Online (Sandbox Code Playgroud)

以及

[weather setValue:hiveObs forKey:@"hiveObservation"]
Run Code Online (Sandbox Code Playgroud)

两个都抛出相同的错误,如果我注释掉设置对象保存到持久存储的关系.hiveObs是在旧视图中创建的,但尚未保存...如果这很重要?

编辑:经过思考和添加信息.
我传入的ManagedObject已创建,但在更改视图之前未保存.它在新视图中使用nil值记录,但这可能是问题吗?

核心数据文件
HiveObservation.h

import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@class BoxObservation, HiveDetails, WeatherObservation;

@interface HiveObservation : NSManagedObject
... //other properties omitted
@property (nonatomic, retain) HiveDetails *hiveDetail;
@property (nonatomic, retain) WeatherObservation *weatherObservation;
@end

@interface HiveObservation (CoreDataGeneratedAccessors)

- (void)addBoxObservationsObject:(BoxObservation *)value;
- (void)removeBoxObservationsObject:(BoxObservation *)value;
- (void)addBoxObservations:(NSSet *)values;
- (void)removeBoxObservations:(NSSet *)values;

@end
Run Code Online (Sandbox Code Playgroud)

WeatherObservation.h

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@class HiveObservation;

@interface WeatherObservation : NSManagedObject
//... other properties omitted
@property (nonatomic, …
Run Code Online (Sandbox Code Playgroud)

core-data ios

6
推荐指数
2
解决办法
905
查看次数

BLE Swift写字符

我正在努力让我的TI sensortag温度传感器通知.根据http://processors.wiki.ti.com/images/a/a8/BLE_SensorTag_GATT_Server.pdf,我需要将UUID F000AA02-0451-4000-B000-000000000000的特征值设置为"01:00".这是我做的:

import UIKit
import CoreBluetooth

class ViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate{

    var centralManager:CBCentralManager!
    var blueToothReady = false
    var connectingPeripheral: CBPeripheral!

    @IBOutlet weak var textField: UITextView!

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        startUpCentralManager()
    }

    func startUpCentralManager() {
        centralManager = CBCentralManager(delegate: self, queue: nil)
    }

    func discoverDevices() {
        centralManager.scanForPeripheralsWithServices(nil, options: nil)
    }

    func centralManager(central: CBCentralManager!, didDiscoverPeripheral peripheral: CBPeripheral!, advertisementData: (NSDictionary), RSSI: NSNumber!) {

        output("Discovered", data: peripheral.name)

        self.connectingPeripheral = peripheral
        centralManager.stopScan()
        self.centralManager.connectPeripheral(peripheral, options: nil)

    } …
Run Code Online (Sandbox Code Playgroud)

bluetooth ios core-bluetooth swift

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