小编Shi*_*ami的帖子

Xcode 5表示测试失败但显示绿色复选标记

我在Xcode 5的新XCTest框架中编写了一些单元测试.

该测试似乎成功地通过大部分的时间,但我遇到一个奇怪的行为在那里,如果我进行的测试,足够的时间连续,最终我会得到一个"试验失败"的消息,控制台也将展示Program ended with exit code 0,但也有所有测试旁边的绿色复选标记.

这里出了什么问题?

unit-testing ios xcode5 xctest

44
推荐指数
1
解决办法
3614
查看次数

即使在保存之后,新创建的NSManagedObject也会返回临时objectID

非常简单的情况.不知道为什么会导致问题.

我有一个视图,在子NSManagedObjectContext中创建一个新的NSManagedObject.当用户按下"完成"时,它保存子上下文,然后保存父上下文,然后使用新创建的对象的objectID发布通知.在主视图控制器中,我响应通知并尝试获取新创建的对象existingObjectWithID:error:.

问题是失败,因为objectID是临时的(我得到"Cocoa错误133000").保存到两个上下文是完美的:当我重新加载应用程序时,我可以看到我创建的条目.但是当我需要获得对新对象的引用时,它失败了.

我保存之后,为什么它会给我一个临时对象ID ?

注意:我尝试过使用obtainPermanentIDsForObjects:error:,但是当我尝试使用它来获取对象时,永久ID仍然失败.

这是一些代码:

-(IBAction)done:(id)sender
{
    if ([editorDoneNotification isEqualToString:kNOTIFICATION_OBJECTADDED]) {
        // save the temporary moc
        NSError* e;
        if (![self.tempContext save:&e]) { // this is always a successful save
            NSLog(@"Failed to save temporary managed object context: %@", [e localizedDescription]);
            [[[UIAlertView alloc] initWithTitle:@"Database Error"
                                    message:@"Failed to add object."
                                   delegate:nil
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil] show];
        }
    }
    NSError* e;
    if (![[[AMDataModel sharedDataModel] mainContext] save:&e]) { // this is also successful
        NSLog(@"Failed to save main managed …
Run Code Online (Sandbox Code Playgroud)

core-data objective-c ios

15
推荐指数
2
解决办法
3122
查看次数

在Xcode中多次自动运行测试用例

在Xcode中,有没有办法让我自动运行一个测试用例n次?

这样做的原因是我的一些beta测试人员在我的应用程序中遇到随机崩溃.我在TestFlight中看到崩溃日志以及堆栈跟踪,但我无法重现崩溃.

崩溃很少发生,但是当它发生时,它总是在用户尝试创建数据库记录时发生,然后上传到服务器.崩溃日志的问题是我的代码没有在他们的堆栈跟踪中出现(所有UIKit和CoreFoundation的东西 - 每次都不同).

我的解决方案是为应用程序的那部分运行测试100次,并设置异常断点,以尝试在我的开发环境中触发错误.但我不知道如何自动执行此操作.

xcode ios xctest

8
推荐指数
3
解决办法
1886
查看次数

在iOS中对Google Maps标记进行聚类

我有一个基于地图的应用程序,使用谷歌地图的iOS SDK.我需要在核心数据数据库中存储多达数千个项目,并在地图上显示标记.出于性能和可用性的原因,我需要在用户缩小时对这些标记进行聚类,但我需要确保放置代表性标记,以便用户知道放大的位置以查看更多细节.

我的核心数据模型中的每个条目都存储了纬度/经度双值.因此,我想要对项目进行聚类的是保留一个单独的实体,我在其中剥离地理坐标的不太重要的部分并在其中存储计数.

因此,每当在数据库中插入具有lat/lon {44.9382719,-130.20293849}的项目时,具有lat/lon {44.9,-130.2}的另一个"集群"对象的计数属性会递增.我的想法是,在低缩放(即缩小)时,我只会查询群集对象并将其放在地图上而不是实际的项目上.

我的问题是:根据NSManagedObject引用,你不应该获取内容awakeFromInsert,那么我如何确保插入一种托管对象更新另一种相应托管对象的值?

google-maps core-data objective-c ios

7
推荐指数
2
解决办法
7749
查看次数

performBlockAndWait在iOS 7上使用专用队列死锁的子上下文

我有两个NSManagedObjectContext名字importContextchildContext.childContext是他们的孩子importContext,他们俩都是NSPrivateQueueConcurrencyType.

为了避开主线程,我正在对importContext队列进行大量工作.这项工作涉及大量取的并保存,所以它的方便来包装整个事情里面performBlockAndWait:importContext(它不会被同步操作需要,因为我以后有代码performBlockAndWait依赖于它的结果).

在这项工作中的某些时候,我可能需要从JSON结果创建新的托管对象.这些JSON值可能无效并且我的验证失败,因此在创建对象后,如果它们不好,我需要能够抛弃它们.这就是childContext进来的地方.我将新对象插入其中,如果它的JSON属性最终没有意义,我就放弃了childContext.

当我需要保存时,问题就来了childContext.我希望它有自己的私有队列,与父队列分开.但是,这会导致iOS 7(不是iOS 8)上的死锁.当我在iOS 8模拟器和设备上运行相同的代码时,childContext它会在单独的线程上创建自己的队列并正确进行保存.

看起来当我运行iOS 7时,它childContext正在尝试save:在父队列中进行,但是父进程正在等待其子进程导致死锁.在iOS 8中,这不会发生.有谁知道为什么?

这是简化的代码:

   -(NSManagedObjectContext *)importContext
   {
       NSManagedObjectContext* moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
       moc.persistentStoreCoordinator = [self storeCoordinator];
       return moc;
   }

   -(void)updateItems:(NSArray*)ItemDescriptions
   {
      [self.importContext performBlockAndWait:^{
           //get info and update
           ...
           ...

       if(needToCreateNewItem){
          NSManagedObjectContext* childContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
          childContext.parentContext = …
Run Code Online (Sandbox Code Playgroud)

concurrency core-data nsmanagedobjectcontext ios

7
推荐指数
1
解决办法
1729
查看次数

SwiftUI 中的分组列表数据可按部分显示

我正在尝试获取一组项目(结构)并使用 SwiftUI 将它们显示在分组表视图中。

我的(简化的)模型如下所示:

struct CheckIn: Identifiable {
  ...
  let id = UUID()
  let date = Date().atMidnight // removes the time component
  var completed: Bool
  ...
}

class Store: ObservableObject {
  @Published var checkIns = [...] {
    didSet { persist() }
  }
}
Run Code Online (Sandbox Code Playgroud)

在列表中显示签到之前,我想按日期对它们进行分组。所以我有另一个模型:

struct DailyCheckIns {
  let date: Date
  let checkIns: [CheckIn]
}

// and a function to group the check-ins array:
func groupByDate(_ checkIns: [CheckIn]) -> [DailyCheckIns] {...}
Run Code Online (Sandbox Code Playgroud)

视图是我遇到问题的地方。下面的版本可以工作,但数据没有明显分组。我所说的“有效”是指数据被传入CheckInView并且它可以更新其签入,然后正确地反映在商店和 UI 中。

struct ContentView: View {
  @EnvironmentObject …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui swiftui-list

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

在基于地图的 iOS 应用程序中管理内存

我正在开发一个基于企业地图的应用程序,它需要显示从大量劳动力收集的信息,并将其全部显示在每个员工的 iPad 上。因此,地图上的标记数量会迅速增加(数以千计)。此外,每个标记都将由一个 NSManagedObject 子类支持,该子类在标记存在时保存在内存中。

我正在使用 Google Maps iOS SDK,问题是,即使没有任何标记,只是平移和缩放会导致内存使用量大幅增加。启动时应用程序的脏内存大小为 100MB(使用分配工具)。一点点平移和缩放很快使它最多可以拍摄到 300,问题是当我停止平移和缩放时,内存永远不会下降。类似地,如果我打开了很多标记并删除它们,同样不会降低内存(当我删除标记时,我确保也不保留对任何对象的任何引用)。内存下降的唯一时间是我更改地图类型时。如果我在街景视图中平移/缩放很多,然后切换到卫星视图,脏内存会突然下降 50MB 以上。

所以我想知道是否有人在使用谷歌地图时有任何处理内存的技巧,或者关于谷歌地图如何管理/释放内存的任何信息?

google-maps memory-management ios automatic-ref-counting google-maps-sdk-ios

5
推荐指数
0
解决办法
585
查看次数

在我的应用程序中找到了一个N​​SZombie ......现在怎么样?

我有一个NSManagedObject的子类,有一些"整数32"属性,真的是枚举.这些枚举在我的模型的.h文件中定义,如下所示:

typedef enum {
    AMOwningCompanyACME,
    AMOwningCompanyABC,
    AMOwningCompanyOther
} AMOwningCompany;
Run Code Online (Sandbox Code Playgroud)

我需要显示一个表视图,显示此自定义对象的每个属性的值,因此对于每个枚举,我有一个看起来像这样的方法来返回字符串值:

-(NSArray*)stringsForAMOwningCompany
{
    return [NSArray arrayWithObjects:@"ACME Co.", @"ABC Co.", @"Other", nil];
}
Run Code Online (Sandbox Code Playgroud)

在我的表视图中,我遍历my的属性NSManagedObject(使用NSEntityDescription's' attributesByName和每个属性我调用一个调用相应"stringsFor"方法的辅助方法来返回该特定属性的字符串:

-(NSArray*)getStringsArrayForAttribute:(NSString*)attributeName
{
    SEL methodSelector = NSSelectorFromString([self methodNameForAttributeNamed:attributeName]);
    NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:[[AMProperty class] instanceMethodSignatureForSelector:methodSelector]];
    [invocation setSelector:methodSelector];
    [invocation setTarget:self.editingPole];
    [invocation invoke];

    NSArray* returnValue = nil;
    [invocation getReturnValue:&returnValue];

    return returnValue;
}
Run Code Online (Sandbox Code Playgroud)

我的表格视图cellForRowAtIndexPath如下所示:

...
NSString* itemName = self.tableData[indexPath.row];
NSAttributeDescription* desc = itemAttributes[itemName];

NSString* cellIdentifier = [self cellIdentifierForAttribute:desc]; // checks the attribute type and …
Run Code Online (Sandbox Code Playgroud)

debugging malloc objective-c nsinvocation ios

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

解决有利于我们或他们的 git 合并冲突,而不需要从任何一方获取整个文件

关于如何解决有利于一个或另一个分支的合并冲突的 SO 有很多问题。但我找到的最常见的答案是使用git checkout --oursor git checkout --theirs

问题是将从任一分支git checkout获取整个文件。文件的某些部分可能合并得很好,我们不希望它们被删除。

所以问题是:给定一个处于冲突状态的文件,是否有一种方法可以删除冲突标记以支持“我们的”或“他们的”,而无需将此策略应用于整个合并或从“我们的”中获取整个文件或“他们的”?

使用简单的脚本绝对可以做到这一点,但我想知道是否有我找不到的现有解决方案。

git version-control

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

UISegmentedControl与AutoLayout错位标题

我有一个自定义的UITableViewCell,UISegmentedControl右侧的左侧有一个标签.我刚刚习惯在代码中使用自动布局,这就是我在自定义单元格中使用的内容(使用UIView + AutoLayout):

-(void)updateConstraints
{
    self.titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
    self.segmentedControl.translatesAutoresizingMaskIntoConstraints = NO;

    [self.titleLabel pinToSuperviewEdges:JRTViewPinLeftEdge inset:DB_AUTOLAYOUT_DEFAULT_INSET];
    [self.titleLabel centerInContainerOnAxis:NSLayoutAttributeCenterY];
    [self.segmentedControl pinToSuperviewEdges:JRTViewPinRightEdge inset:DB_AUTOLAYOUT_DEFAULT_INSET];
    [self.segmentedControl pinAttribute:NSLayoutAttributeBaseline
                            toAttribute:NSLayoutAttributeBaseline
                                 ofItem:self.titleLabel];

    [super updateConstraints];
}
Run Code Online (Sandbox Code Playgroud)

我的问题是分段控件的第一个标题始终未对齐:

这就是它在iOS 6上的样子: 在此输入图像描述

在iOS 7上: 在此输入图像描述

所以第一个问题是:我该如何解决这个问题?

其他,切向问题:我是通过放入自动布局代码做正确的事情updateConstraints还是应该只应用约束一次?

objective-c uisegmentedcontrol ios autolayout

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