2015-11-06 158 views
5

我的应用程序已经通过Xcode的运行在调试模式下罚款,但每当它通过TestFlight下载,它与此错误崩溃:EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x000200013f7b9e78EXC_BAD_ACCESS KERN_INVALID_ADDRESS崩溃

它的崩溃在这条线。我在这个堆栈跟踪中看到了specialized Array.withUnsafeMutableBufferPoint,它可能与此有关。

self.array.sortInPlace. { 
       (($0 as Dictionary<String, AnyObject>)["time"] as? String) > (($1 as Dictionary<String, AnyObject>)["time"] as? String) 
      } 

在雨燕1.3我用sort,现在斯威夫特2我使用sortInPlace。不知道这是否有所作为,但我知道sort的结果未被调用,因为它是不可变的。

Thread : Crashed: com.apple.main-thread 
    0 libswiftCore.dylib    4302688056 _swift_retain_(swift::HeapObject*) + 8 
    1 App       4295962040 specialized LiveFeedViewController.(viewDidLoad(LiveFeedViewController) ->() ->()).(closure #3).(closure #1) (LiveFeedViewController.swift) 
    2 App       4295785356 specialized thunk (LiveFeedViewController.swift) 
    3 App       4295953880 specialized _siftDown<A where ...> (inout A, A.Index, Range<A.Index>, inout (A.Generator.Element, A.Generator.Element) -> Bool) ->() (LiveFeedViewController.swift) 
    4 App       4295952448 specialized _heapSort<A where ...> (inout A, Range<A.Index>, inout (A.Generator.Element, A.Generator.Element) -> Bool) ->() (LiveFeedViewController.swift) 
    5 App       4295938144 specialized _introSortImpl<A where ...> (inout A, Range<A.Index>, inout (A.Generator.Element, A.Generator.Element) -> Bool, Int) ->() (LiveFeedViewController.swift) 
    6 App       4295938120 specialized _introSortImpl<A where ...> (inout A, Range<A.Index>, inout (A.Generator.Element, A.Generator.Element) -> Bool, Int) ->() (LiveFeedViewController.swift) 
    7 App       4295938120 specialized _introSortImpl<A where ...> (inout A, Range<A.Index>, inout (A.Generator.Element, A.Generator.Element) -> Bool, Int) ->() (LiveFeedViewController.swift) 
    8 App       4295938120 specialized _introSortImpl<A where ...> (inout A, Range<A.Index>, inout (A.Generator.Element, A.Generator.Element) -> Bool, Int) ->() (LiveFeedViewController.swift) 
    9 App       4295938120 specialized _introSortImpl<A where ...> (inout A, Range<A.Index>, inout (A.Generator.Element, A.Generator.Element) -> Bool, Int) ->() (LiveFeedViewController.swift) 
    10 App       4295938120 specialized _introSortImpl<A where ...> (inout A, Range<A.Index>, inout (A.Generator.Element, A.Generator.Element) -> Bool, Int) ->() (LiveFeedViewController.swift) 
    11 App       4295938120 specialized _introSortImpl<A where ...> (inout A, Range<A.Index>, inout (A.Generator.Element, A.Generator.Element) -> Bool, Int) ->() (LiveFeedViewController.swift) 
    12 App       4295938120 specialized _introSortImpl<A where ...> (inout A, Range<A.Index>, inout (A.Generator.Element, A.Generator.Element) -> Bool, Int) ->() (LiveFeedViewController.swift) 
    13 App       4295938120 specialized _introSortImpl<A where ...> (inout A, Range<A.Index>, inout (A.Generator.Element, A.Generator.Element) -> Bool, Int) ->() (LiveFeedViewController.swift) 
    14 App       4295938120 specialized _introSortImpl<A where ...> (inout A, Range<A.Index>, inout (A.Generator.Element, A.Generator.Element) -> Bool, Int) ->() (LiveFeedViewController.swift) 
    15 App       4295960640 specialized specialized MutableCollectionType<A where ...>.sortInPlace<A where ...>((A.Generator.Element, A.Generator.Element) -> Bool) ->() (LiveFeedViewController.swift) 
    16 App       4295730388 _TPA__TTSg5GSaGVSs10DictionarySSPSs9AnyObject___GSaGS_SSPS0____Ss21MutableCollectionTypeSs_GVSs17IndexingGeneratorGSaGS_SSPS0_____GS2_GSaGS_SSPS0_____Ss13GeneratorTypeSs_GS_SSPS0____SiSiSs21RandomAccessIndexTypeSs_SiSiSs18_SignedIntegerTypeSs_SiSiSs33_BuiltinIntegerLiteralConvertibleSs_SiSiSs16SignedNumberTypeSs_SiSiS6_Ss_Si_GVSs10ArraySliceGS_SSPS0____GS8_GS_SSPS0____Ss9IndexableSsGS8_GS_SSPS0____Ss12SequenceTypeSs_GS2_GS8_GS_SSPS0_____GS2_GS8_GS_SSPS0_____S3_Ss_GS_SSPS0____SiSiSs16ForwardIndexTypeSs_SiSiS5_Ss_SiSiS6_Ss_Si_GS8_GS_SSPS0_____GS_SSPS0____GS_SSPS0______TFFeRq_Ss21MutableCollectionTypeqq_Ss16MutableIndexable5IndexSs21RandomAccessIndexType_SsS_11sortInPlaceuRq_S_qq_S0_5IndexS1__FRq_FFTqqq_Ss14CollectionType9GeneratorSs13GeneratorType7Elementqqq_S2_9GeneratorS3_7Element_SbT_U_FTGVSs20UnsafeMutablePointerQQQPS_9Generator7Element_Si_T_ (LiveFeedViewController.swift) 
    17 App       4295730548 _TPA__TTSg5GSaGVSs10DictionarySSPSs9AnyObject___GSaGS_SSPS0____Ss21MutableCollectionTypeSs_GVSs17IndexingGeneratorGSaGS_SSPS0_____GS2_GSaGS_SSPS0_____Ss13GeneratorTypeSs_GS_SSPS0____SiSiSs21RandomAccessIndexTypeSs_SiSiSs18_SignedIntegerTypeSs_SiSiSs33_BuiltinIntegerLiteralConvertibleSs_SiSiSs16SignedNumberTypeSs_SiSiS6_Ss_Si_GVSs10ArraySliceGS_SSPS0____GS8_GS_SSPS0____Ss9IndexableSsGS8_GS_SSPS0____Ss12SequenceTypeSs_GS2_GS8_GS_SSPS0_____GS2_GS8_GS_SSPS0_____S3_Ss_GS_SSPS0____SiSiSs16ForwardIndexTypeSs_SiSiS5_Ss_SiSiS6_Ss_Si_GS8_GS_SSPS0_____GS_SSPS0____GS_SSPS0______TTRGRq_Ss21MutableCollectionTypeqq_Ss16MutableIndexable5IndexSs21RandomAccessIndexType_XFo_dGVSs20UnsafeMutablePointerqqq_Ss14CollectionType9GeneratorSs13GeneratorType7Element_dSi_dT_zoPSs9ErrorType__XFo_dGS2_qqq_S3_9GeneratorS4_7Element_dSi_iT_zoPS5___ (LiveFeedViewController.swift) 
    18 App       4295730716 _TPA__TTSg5GVSs10DictionarySSPSs9AnyObject___T____TFFSa42_withUnsafeMutableBufferPointerIfSupportedu__rFRGSaq__FzFzTGVSs20UnsafeMutablePointerq__Si_qd__GSqqd___U_FzRGVSs26UnsafeMutableBufferPointerQd___Q_ (LiveFeedViewController.swift) 
    19 App       4295954668 specialized Array.withUnsafeMutableBufferPointer<A><B>((inout UnsafeMutableBufferPointer<A>) throws -> B) throws -> B (LiveFeedViewController.swift) 
    20 App       4295959880 specialized specialized MutableCollectionType<A where ...>.sortInPlace<A where ...>((A.Generator.Element, A.Generator.Element) -> Bool) ->() (LiveFeedViewController.swift) 
    21 App       4295895596 LiveFeedViewController.(viewDidLoad(LiveFeedViewController) ->() ->()).(closure #3) (LiveFeedViewController.swift:1862) 
    22 libdispatch.dylib    6875551464 _dispatch_call_block_and_release + 24 
    23 libdispatch.dylib    6875551400 _dispatch_client_callout + 16 
    24 libdispatch.dylib    6875573680 _dispatch_main_queue_callback_4CF + 1844 
    25 CoreFoundation     6518931960 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12 
    26 CoreFoundation     6518923360 __CFRunLoopRun + 1628 
    27 CoreFoundation     6518066336 CFRunLoopRunSpecific + 384 
    28 GraphicsServices    6704955528 GSEventRunModal + 180 
    29 UIKit       6609391612 UIApplicationMain + 204 
    30 App       4296344512 main (AppDelegate.swift:23) 
    31 libdyld.dylib     6875752632 start + 4 

UPDATE:

这是所有在夫特2,并且该阵列是字典的阵列,声明为var array = [[String:AnyObject]]()。它通过附加一系列字典来填充,就像这样。

self.dict["foo"] = 0 
self.dict["bar"] = "dog" 
self.array.append(self.dict) 

我的问题是,它在一个dispatch_group_notify;它正在等待dispatch_group_leave s系列。这可能与它有关吗?这看起来是这样的:

dispatch_group_notify(group, queue) {() -> Void in 

     self.array.sortInPlace { 
      (($0["foo"] as? Int) > (($1)["foo"] as? Int)) 
     } 
} 
+0

那么这个数组是什么,它是如何声明的,它是如何填充的,它里面是什么? – matt

+0

@matt看到更新。让我知道你是否需要更多信息。 – chicobermuda

+0

这可能并不相关,但我无法看到它尝试对_Optionals_进行排序的意义。如果你知道这些东西是Int或String或其他,你应该将它们排序为Int或String或其他。在你施放的时候是否有失败的可能性,如果是这样,那么你在这种情况下会发生什么? – matt

回答

3

关于更新代码:

由于填充该数组“手动”最可靠(有效,符合斯威夫特的类型安全)的方法是使用自定义类非可选属性而不是通用字典。

class Item { 
    var foo : Int 
    var bar : String 

    init(foo : Int, bar : String) { 
    self.foo = foo 
    self.bar = bar 
    } 
} 

var array = [Item]() 
array.append(Item(foo: 0, bar: "dog")) 
array.append(Item(foo: 1, bar: "cat")) 

array.sortInPlace { $0.foo > $1.foo } 

所有类型是众所周知的和非可选的。

无型铸造,无解缠,没有开销,没有问题。

4

我遇到了同样的问题,但它只影响〜50%的设备,只有那些运行版本的版本的应用程序。我的代码没有使用任何类似dispatch_group

在我使用代码如我的情况下:

contacts = contacts.sort({ $0.name.localizedCaseInsensitiveCompare($1.name) == .OrderedAscending }) 

由于它仅影响用户的数量有限,崩溃在一个:

contacts.sortInPlace({ $0.name.localizedCaseInsensitiveCompare($1.name) == .OrderedAscending }) 

当我代之以它固定低级别的Swift API,并通过替换sort进行修复,我相信这是Apple代码中的一个错误。

我建议filing a bug with Apple并在此期间使用sort

注:您的代码和矿之间的另一个相似的是shorthand argument names(即$ 0和$ 1)的使用。但是,即使我用命名参数替换它们,它仍然会崩溃。

更新:很多人都是experiencing the same issue on the apple forums。根据该线程,它似乎在最新的Xcode测试版中得到修复。

0

这是一个老问题,但调试运行中很难重现EXC_BAD_ACCESS KERN_INVALID_ADDRESS的主要原因是调试版本和发行版本中释放对象的生命周期不同。在后者中,内存立即消失,可能被替换为不相关的对象,而在前者中,内存可能仍会保留一小段时间,所以您的应用程序仍然可以在没有问题的情况下顺利进行。另外,当发布版本中发生这种情况时,崩溃跟踪的最后一行可能会令人困惑,因为所引用的对象可能是某种完全不相关的类型。如果是这种情况,我们应该在堆栈树中查找一下,并希望在那里找到更多线索。

0

遇到此错误的一种情况是我在Objective-C中声明了一个非空属性,但忘记初始化它,然后尝试在Swift中使用它。

相关问题