【问题标题】:App crashes on only iPhone 5 when adding GMSMarker to the map: EXC_BAD_ACCESS将 GMSMarker 添加到地图时,应用程序仅在 iPhone 5 上崩溃:EXC_BAD_ACCESS
【发布时间】:2018-02-20 11:09:42
【问题描述】:

我正在开发的应用程序在谷歌地图上绘制了很多 GMSMarkers。它在除 iPhone 5 之外的所有其他设备上都可以正常工作。我将 GMSMarker 子类化并为子类设置了一个对象 ID。这样做是为了让我可以将标记添加到 NSSet 并确保只有不同的标记被绘制并且没有重复。子类是:

@implementation BYOMarker
-(BOOL)isEqual:(id)object
{
    BYOMarker *otherMarker = (BYOMarker *)object;
    if (self.objectID.intValue == otherMarker.objectID.intValue) {
        return YES;
    }
    return NO;
}
-(NSUInteger)hash
{
    return  [self.objectID hash];
}
@end

.h 文件

#import <GoogleMaps/GoogleMaps.h>

@interface BYOMarker : GMSMarker
@property (assign, nonatomic) NSNumber  *objectID;
@end

应用程序在返回散列函数时崩溃,并出现 EXC_BAD_ACCESS 异常。当我为标记设置地图对象时,我启用了 Zombie 对象并尝试打印 po marker.objectID,但出现以下错误:

*** -[CFNumber respondsToSelector:]: message sent to deallocated instance 0x80416470
0x80416470

有什么帮助吗?! TIA

【问题讨论】:

  • 使用 strong 而不是为 objectID 赋值

标签: ios objective-c memory-management google-maps-sdk-ios iphone-5


【解决方案1】:

您的objectID 属性存在内存管理问题。不要将assign 用于对象指针属性。使用strong

@property (strong, nonatomic) NSNumber *objectID;

【讨论】:

  • 我怎么错过了!谢谢。知道为什么这不仅仅在 iPhone 5 中处理吗?没有其他设备导致我犯这个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多