小编Fra*_*kZp的帖子

核心数据和iOS 7:持久性存储的不同行为

我正准备更新基于Core Data的应用程序以修复iOS 7.我使用Xcode 5和iOS 7 SDK GM.但是我意识到持久性存储的不同行为(即a UIManagedDocument):在iOS 7构建之前,persistentStore文档文件夹中只有一个文件(有时还有第二个文件persistentStore-journal).

在iOS 7构建(干净安装)中,持久性存储现在有三个文件:

  • persistentStore
  • persistentStore-wal
  • persistentStore-shm

Apple现在默认将日志模式更改为WAL吗?我想知道我的应用程序是否有影响(想想用户如何从上一版本更新)?是否最好禁用WAL - 如果是这样,我怎么能用iOS 7/UIManagedDocument

sqlite core-data ios uimanageddocument ios7

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

检查数组是否包含另一个数组的相同对象的最快方法

目标是比较两个数组并检查它们是否包含相同的对象(尽可能快 - 数组中有很多对象).无法检查数组,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)

这有效,但这些是两个嵌套的快速枚举.有没有办法做更快的比较?

objective-c nsarray fast-enumeration ios

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

如何在Modal Views iOS 6上更改状态栏

我有以下星座:

主视图(自定义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)

此外,在故事板中一切都很好.在模拟器或设备上运行应用程序看起来不同: 故事板 模拟器

statusbar ios6

13
推荐指数
2
解决办法
4856
查看次数

如何使用导航栏在模态视图中更改iOS 7中的UIStatusBarStyle?

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];MainViewControllerprepareForSegue: sender:与条件方法- (UIStatusBarStyle)preferredStatusBarStyle {}返回UIStatusBarStyleLightContent时模式的看法,提出-但是这并没有影响了.

如何在模态视图中更改UIStatusBarStyle?

编辑:发布更新:我需要提到的ModalViewController是嵌入在NavigationControllera中NavigationBar.随着NavigationBar设置为隐藏的上述呼吁[self setNeedsStatusBarAppearanceUpdate];ModalViewController精品工程.但是,当酒吧可见时.

statusbar modalviewcontroller ios ios7

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

iOS 7:UIDocument/UIManagedDocument和iCloud发生了什么?

我正在关注有关iCloud和核心数据的WWDC 2013会议.我真的希望看到有任何新的视频UIManagedDocumentUIDocument.您可能还记得,这些类理论上提供了一种非常简单的方法来在本地和iCloud中使用(UIManagedDocument)或不使用CoreData(UIDocument)来保存数据.但是这些概念已经或者仍然存在一些非常烦人的基于系统的错误,特别是在设备之间同步数据时,请参见此处.

但是,没有视频覆盖UIManagedDocument/ UIDocument和iCloud主题.视频"Core Data和iCloud有什么新内容?" 仅介绍使用Core Data持久存储的经典方法,该存储由新API扩展以自动覆盖后备存储和同步.有什么事给任何信息UIManagedDocument/ UIDocument?他们是否放弃并将经典方法视为使用Core Data和iCloud同步应用程序的更好方法?

core-data ios uidocument uimanageddocument

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

iOS:OS版本检查的预处理器

在过去,我使用以下预处理器代码有条件地执行不同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

objective-c ios c-preprocessor

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

NSSet with dictionaries:通过Key的值获取对象

我使用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有更好的性能来查找对象.而且我不需要有序的对象序列.

enumeration objective-c nsdictionary nsarray nsset

4
推荐指数
1
解决办法
3073
查看次数

在applicationDidEnterBackground上调度保存操作:

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当应用程序进入睡眠模式时,我可以确定该方法是完全执行还是中断?

multithreading multitasking grand-central-dispatch ios

4
推荐指数
1
解决办法
1423
查看次数

目标C:NSRange或类似浮动?

对于某些方法,我希望它们返回一系列值(从: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范围?

typedef objective-c nsrange

4
推荐指数
1
解决办法
2342
查看次数

iOS/Mac OS:保存和比较数组中的CGPoints/NSPoints

我的目的是比较CGPointsCGPoint评估几个移动对象(以及应用程序也适用于Mac OS NSPointsNSPoint值),以检测对象是否具有相同的位置.

我的第一个解决方案是快速枚举这些对象的数组并将所有对象存储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也必须使用valueWithPointNSPoint.

我可以保存x并保存 …

macos enumeration objective-c cgpoint ios

3
推荐指数
1
解决办法
3157
查看次数

主要区别Hyperledger Fabric和BigchainDB

Hyperledger Fabric和BichainDB都提供了一个私有的,允许的区块链数据库.通过他们的概念,他们试图解决公共区块链的主要缺点,如缺乏隐私和缺乏性能(低吞吐量等).

这两种技术之间的主要区别是什么?

hyperledger-fabric bigchaindb

3
推荐指数
1
解决办法
1373
查看次数

可变副本和其他创建方法之间的区别

我经常需要更改一个NSArray或一个的内容NSDictionary.通常我会这样:NSDictionary- >创建NSMutableDictionary并编辑它 - >用编辑过的原件替换原件NSDictionary(作为不可变的).

我知道有两种方法可以做到这一点:

1)使用mutable copycopy:

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

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

SwiftUI:使用 Spacers 在一个 VStack 中均匀分布多个 VStack

我正在尝试构建一个包含多个 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 swiftui vstack

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