我正准备更新基于Core Data的应用程序以修复iOS 7.我使用Xcode 5和iOS 7 SDK GM.但是我意识到持久性存储的不同行为(即a UIManagedDocument):在iOS 7构建之前,persistentStore文档文件夹中只有一个文件(有时还有第二个文件persistentStore-journal).
在iOS 7构建(干净安装)中,持久性存储现在有三个文件:
persistentStorepersistentStore-wal 和persistentStore-shmApple现在默认将日志模式更改为WAL吗?我想知道我的应用程序是否有影响(想想用户如何从上一版本更新)?是否最好禁用WAL - 如果是这样,我怎么能用iOS 7/UIManagedDocument?
目标是比较两个数组并检查它们是否包含相同的对象(尽可能快 - 数组中有很多对象).无法检查数组,isEqual:因为它们的排序方式不同.
我已经尝试过这里发布的解决方案(/sf/answers/79689221/ - 请参阅Peter Hosey发布的帖子的最后一个代码片段).但这不适用于不同排序的数组.
我现在使用的代码如下:
+ (BOOL)arraysContainSameObjects:(NSArray *)array1 andOtherArray:(NSArray *)array2 {
// quit if array count is different
if ([array1 count] != [array2 count]) return NO;
BOOL bothArraysContainTheSameObjects = YES;
for (id objectInArray1 in array1) {
BOOL objectFoundInArray2 = NO;
for (id objectInArray2 in array2) {
if ([objectInArray1 isEqual:objectInArray2]) {
objectFoundInArray2 = YES;
break;
}
}
if (!objectFoundInArray2) {
bothArraysContainTheSameObjects = NO;
break;
}
}
return bothArraysContainTheSameObjects;
}
Run Code Online (Sandbox Code Playgroud)
这有效,但这些是两个嵌套的快速枚举.有没有办法做更快的比较?
我有以下星座:
主视图(自定义UIViewController,无导航控制器或导航栏),包含一个按钮,该按钮以模态方式分段到第二个表视图控制器,该控制器嵌入在导航控制器中:
MainView - >导航控制器 - > TableView
在MainView上,状态栏为黑色(iOS 6无需更改 - 即使状态栏设置为默认值)在TableViewController上,状态栏应具有默认样式(iOS 5中的灰色,iOS 6中的导航栏为蓝色) .
在iOS 5中,通过TableViewController中的以下代码行很容易实现:
if ([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarStyle:)]) {
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}
Run Code Online (Sandbox Code Playgroud)
在iOS 6下运行此操作会发生.我怎样才能做到这一点?我在项目摘要和plist中尝试了所有可能的状态栏设置(如下所述:https://stackoverflow.com/a/12468689/1685971)
此外,在故事板中一切都很好.在模拟器或设备上运行应用程序看起来不同:

在iOS的7过渡指南提供一个很好的提示如何改变UIStatusBarStyle在动态UIViewController使用
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
Run Code Online (Sandbox Code Playgroud)
和...一起 [self setNeedsStatusBarAppearanceUpdate];
这在单个视图应用程序中工作正常.但是,我现在正试图将UIStatusBarStyle模态视图更改为UIStatusBarStyleLightContent.有一个MainViewController分隔到ModalViewController,它本身嵌入在一个NavigationController.在ModalViewController已设置其委托的MainViewController.
我试着打电话给[self setNeedsStatusBarAppearanceUpdate];在ModalViewController连同该类下面的方法不具效力:
// In ModalViewController.m
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
Run Code Online (Sandbox Code Playgroud)
我也试着打电话给[self setNeedsStatusBarAppearanceUpdate];在MainViewController上prepareForSegue: sender:与条件方法- (UIStatusBarStyle)preferredStatusBarStyle {}返回UIStatusBarStyleLightContent时模式的看法,提出-但是这并没有影响了.
如何在模态视图中更改UIStatusBarStyle?
编辑:发布更新:我需要提到的ModalViewController是嵌入在NavigationControllera中NavigationBar.随着NavigationBar设置为隐藏的上述呼吁[self setNeedsStatusBarAppearanceUpdate];的ModalViewController精品工程.但是,当酒吧可见时.
我正在关注有关iCloud和核心数据的WWDC 2013会议.我真的希望看到有任何新的视频UIManagedDocument或UIDocument.您可能还记得,这些类理论上提供了一种非常简单的方法来在本地和iCloud中使用(UIManagedDocument)或不使用CoreData(UIDocument)来保存数据.但是这些概念已经或者仍然存在一些非常烦人的基于系统的错误,特别是在设备之间同步数据时,请参见此处.
但是,没有视频覆盖UIManagedDocument/ UIDocument和iCloud主题.视频"Core Data和iCloud有什么新内容?" 仅介绍使用Core Data持久存储的经典方法,该存储由新API扩展以自动覆盖后备存储和同步.有什么事给任何信息UIManagedDocument/ UIDocument?他们是否放弃并将经典方法视为使用Core Data和iCloud同步应用程序的更好方法?
在过去,我使用以下预处理器代码有条件地执行不同iOS版本的代码:
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
// target is iOS
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000
// target is lower than iOS 6.0
#else
// target is at least iOS 6.0
#endif
#endif
Run Code Online (Sandbox Code Playgroud)
但是对于iOS 7,我有以下问题:
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
// target is iOS
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 70000
// target is lower than iOS 7.0
NSLog(@"This message should only appear if iOS version is 6.x or lower");
#else
// target is at least iOS 7.0
#endif
#endif
Run Code Online (Sandbox Code Playgroud)
NSLog上面的消息显示在iOS 7下的控制台上.我做错了吗?
编辑:以下代码在iOS 7下运行(模拟器和设备)
NSLog(@"Version %i", __IPHONE_OS_VERSION_MIN_REQUIRED);
Run Code Online (Sandbox Code Playgroud)
给出:版本60000
我使用NSSet有以下星座:
NSSet {
NSDictionary {
"Unique-Identifier-Key": Unique Value
"Key2": ValueABC
"Key3": ValueDEF
}
NSDictionary {
"Unique-Identifier-Key": Unique Value
"Key2": ValueFGH
"Key3": ValueJKL
}
NSDictionary {
"Unique-Identifier-Key": Unique Value
"Key2": ValueRST
"Key3": ValueXYZ
}
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种通过其唯一值从NSSet中获取一个字典的方法.NSSet中有很多NSDictionaries,因此我正在寻找具有最佳性能的方式.
如何使用(NSSet *)objectsPassingTest:(BOOL (^)(id obj, BOOL *stop))predicate以下方式?
NSString *idSearched = ...;
NSSet *results = [MySet objectsPassingTest:^(id obj,BOOL *stop){
if ([obj valueForKey:@"Unique-Identifier-Key"] == idSearched) return YES;
else return NO;
}];
Run Code Online (Sandbox Code Playgroud)
这是最高性能的解决方案吗?我使用NSSet,因为我读到NSSets比NSArrays有更好的性能来查找对象.而且我不需要有序的对象序列.
Apple的"应用程序状态和多任务处理"("移动到后台时应该做什么"部分)的文档说当应用程序转到后台时保存:
保存用户数据和应用程序状态信息.进入后台时,应将所有未保存的更改写入磁盘.此步骤是必要的,因为您的应用可能会因为各种原因而在后台安静地被杀死.您可以根据需要从后台线程执行此操作.
当我开始一个调度操作,例如保存,这需要花费一些时间,applicationDidEnterBackground:如下所示,当按下主页按钮时,我没有得到NSLog输出.返回应用程序后,将显示NSLog输出.
- (void)applicationDidEnterBackground:(UIApplication *)application {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self performOperation];
NSLog(@"Operation finished");
});
}
Run Code Online (Sandbox Code Playgroud)
performOperation当应用程序进入睡眠模式时,我可以确定该方法是完全执行还是中断?
对于某些方法,我希望它们返回一系列值(从:235,到:245).我使用它NSRange作为返回值
- (NSRange)giveMeARangeForMyParameter:(NSString *)myParameter;
Run Code Online (Sandbox Code Playgroud)
只要返回值是一个integer范围(例如位置:235,长度:10),这就可以正常工作.
但是现在我遇到了需要返回float范围的问题(例如位置:500.5,长度:0.4).我在doc中读到了NSRange一个typedefed结构NSUIntegers.是否可以为float范围键入另一个结构?如果是这样,是否可以采用类似的方法NSMakeRange(NSUInteger loc, NSUInteger len)来创建这些float范围?
我的目的是比较CGPoints或CGPoint评估几个移动对象(以及应用程序也适用于Mac OS NSPoints或NSPoint值),以检测对象是否具有相同的位置.
我的第一个解决方案是快速枚举这些对象的数组并将所有对象存储CGPoints到数组中,然后再次快速枚举对象数组以检查该位置是否与任何其他对象相同:
// STEP 1: Collect all Positions
NSMutableArray *allPositions = [NSMutableArray arrayWithCapacity:self.allObjects.count];
for (Object *myObject in self.allObjects) {
CGPoint myObjectPosition = ...;
[allPositions addObject:myObjectPosition]; // Problem here
}
// STEP 2: Check for Overlapping
for (Object *myObject in self.allObjects) {
CGPoint myObjectPosition = ...;
if ([allPositions containsObject:myObjectPosition] {
// Overlapping
}
}
Run Code Online (Sandbox Code Playgroud)
这个问题是将点添加到allPositions数组.因此NSValue可以使用:
[NSValue valueWithCGPoint:point];
Run Code Online (Sandbox Code Playgroud)
但这并工作仅在iOS上,为Mac OS也必须使用valueWithPoint和NSPoint.
我可以保存x并保存 …
Hyperledger Fabric和BichainDB都提供了一个私有的,允许的区块链数据库.通过他们的概念,他们试图解决公共区块链的主要缺点,如缺乏隐私和缺乏性能(低吞吐量等).
这两种技术之间的主要区别是什么?
我经常需要更改一个NSArray或一个的内容NSDictionary.通常我会这样:NSDictionary- >创建NSMutableDictionary并编辑它 - >用编辑过的原件替换原件NSDictionary(作为不可变的).
我知道有两种方法可以做到这一点:
1)使用mutable copy和copy:
NSDictionary *myDictionary = @{...};
NSMutableDictionary *dicToEdit = myDictionary.mutableCopy;
// Editing goes here`
myDictionary = dicToEdit.copy;
Run Code Online (Sandbox Code Playgroud)
2)使用arrayWithArray:或dictionaryWithDictionary:
NSDictionary *myDictionary = @{...};
NSMutableDictionary *dicToEdit = [NSMutableDictionary dictionaryWithDictionary:myDictionary];
// Editing goes here
myDictionary = [NSDictionary dictionaryWithDictionary:dicToEdit];
Run Code Online (Sandbox Code Playgroud)
这两种方式有什么区别吗?或者这两种方式中的一种有问题吗?
objective-c nsdictionary nsmutablearray nsarray nsmutabledictionary
我正在尝试构建一个包含多个 VStack(元素)的 VStack(容器),每个 VStack 都有一个标题和一个文本。元素 VStack 应均匀分布,并在其间有间隔。
由于某种原因,它最多只能工作 4 个元素 VStack,如果我增加,则会出现错误
Failed to build ContentView.swift
Ambiguous reference to member 'buildingBlock()'
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
Spacer()
VStack {
Text("Title 1")
Text("Text 1")
}
Spacer()
VStack {
Text("Title 2")
Text("Text 2")
}
Spacer()
VStack {
Text("Title 3")
Text("Text 3")
}
Spacer()
VStack {
Text("Title 4")
Text("Text 4")
}
Spacer()
VStack {
Text("Title 5")
Text("Text 5")
}
Spacer()
VStack {
Text("Title 6")
Text("Text …Run Code Online (Sandbox Code Playgroud) ios ×8
objective-c ×6
nsarray ×3
core-data ×2
enumeration ×2
ios7 ×2
nsdictionary ×2
statusbar ×2
bigchaindb ×1
cgpoint ×1
ios6 ×1
macos ×1
multitasking ×1
nsrange ×1
nsset ×1
sqlite ×1
swiftui ×1
typedef ×1
uidocument ×1
vstack ×1