我正在尝试使用iOS 8中添加的新功能 - 在用户滚动表格视图时隐藏导航栏(类似于移动Safari的功能).我设置的财产hidesBarsOnSwipe
的UINavigationController
,以YES
在viewDidAppear
的方法UITableViewController
:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if([self.navigationController respondsToSelector:@selector(hidesBarsOnSwipe)]) {
self.navigationController.hidesBarsOnSwipe = YES;
}
}
Run Code Online (Sandbox Code Playgroud)
滚动视图时,导航栏会隐藏.到现在为止还挺好.但状态栏仍然可见,我的表视图内容通过它显示,看起来很丑:
我试着设置edgesForExtendedLayout
于UIEdgeRectNone
或调节contentInset
表视图,但它并没有帮助.是否有任何其他解决方案可以隐藏状态栏和导航栏,或使其不透明?
此错误没有意义,因为UIInterfaceOrientationLandscapeRight
支持的方向返回首选方向
//iOS6
-(BOOL)shouldAutorotate
{
return NO;
}
-(NSUInteger)supportedInterfaceOrientations
{
return (UIInterfaceOrientationLandscapeRight | UIInterfaceOrientationLandscapeLeft);
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationLandscapeRight;
}
Run Code Online (Sandbox Code Playgroud)
错误:
由于未捕获的异常'UIApplicationInvalidInterfaceOrientation'而终止应用程序,原因是:'preferredInterfaceOrientationForPresentation必须返回支持的接口方向!'
我想在苹果手表模拟器上调试和运行应用程序.我试过通过使用不同的目标通知,Glance和Watch应用程序,但苹果模拟器没有显示任何东西..它卡在等待附加过程的扩展.我只看到Apple Watch Simulator的黑屏.
我做错了什么?
如何克服这个问题?
我的团队目前正在开发一个iOS应用程序,我们根本不使用故事板.我们在代码中创建UI.因此,为了保持一致性,如果我们可以完全在代码中创建Watch App目标,那就太棒了.
但是,"WatchKit入门"视频和WatchKit框架参考都
提到您需要Watch App目标的故事板.此外,在WKInterfaceObject.h
该init
方法中标记为不可用:
- (instancetype)init NS_UNAVAILABLE;
Run Code Online (Sandbox Code Playgroud)
那么在不使用故事板的情况下创建Watch App真的不可能吗?如果是这样,这个决定背后的原因是什么?我的意思是,我们可以完全用代码创建一个iPhone/iPad应用程序,那么为什么Watch会有所不同呢?
我将在应用程序商店和1个城市飞艇帐户上有多个应用程序,以向所有这些设备发送推送通知.我想知道的是,每个Apple设备是否在所有应用程序中都具有相同的"推送令牌"?这更像是一个数据库体系结构的东西,所以如果一个设备使用我的许多应用程序,我就不会多次复制推送令牌.
如果每个Apple设备为其安装的每个应用程序生成一个唯一的推送令牌,我的架构需要更改.
我有一个问题是将我的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) 我在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
的财产NSIndexPath
是NSInteger
由“计数”的方法的返回值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)
但是,如果要比较每个地方的值,则必须这样做。他们正在数十个地方进行比较。我想知道是否有更好,更聪明的方法来解决这个问题?我不想关闭此警告,因为它可能有助于防止出现无符号整数下溢之类的问题。
希望在这里得到一些意见.
在我目前的iOS项目中,我使用的是带有swift的CoreBluetooth.该应用程序可以在后台使用CoreBluetooth进行通信,基本上可以正常工作.外围设备需要与iOS设备建立活动连接才能按预期工作.只要连接中断,外围设备就会停止当前操作.当应用程序因内存压力而关闭时,也会发生这种情况.在这种情况下,外围设备不应停止工作,因此存在问题.为了解决这个问题,我按照苹果核心蓝牙编程指南实现了状态保存和恢复后台模式,主要说:
我强制iOS使用这个常见项目在后台关闭应用程序:BackgroundKill.当然应用程序不再以调试模式运行,这就是为什么我在重要的位置添加一些NSLog语句以在设备控制台中查找.好消息:当应用程序终止时,连接不再被取消,iOS现在按预期运行以保持连接,因此外围设备不会停止工作.罢工!除了应用程序订阅的电池服务之外,在此期间中央和外围设备之间没有通信.建立有效连接的唯一原因是防止外围设备停止工作.
现在手动重新启动应用程序时,没有提到的NSLogs出现.永远不会调用willRestoreState委托,并且launchOptions为nil.我在实例化CentralManager时尝试使用队列"DISPATCH_QUEUE_CONCURRENT"而不是nil.没有效果.
在重新启动应用程序时,我应该如何使用保留的连接?为什么从不调用willRestoreState委托?我在这里错过了什么吗?为了使用状态保存和恢复,是否必须在系统后台/强制关闭时接收数据?
谢谢你的帮助.:)
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) 我正在努力让我的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) ios ×8
objective-c ×4
iphone ×3
swift ×2
watchkit ×2
apple-watch ×1
bluetooth ×1
clang ×1
cocoa ×1
core-data ×1
ios6 ×1
ios7 ×1
ios8 ×1
ipad ×1
nsinteger ×1
nsuinteger ×1
uistoryboard ×1
xcode ×1