![](/img/trans.png)
[英]keep on loading when i convert swift 4.2 to swift 5 in Xcode 11
[英]Corrupt pointer when using Realm in iOS app after upgrading from Xcode 9.4 to Xcode 11 and Swift 3.0 to Swift 4.2
我有一個包含Swift和Objective-C代碼的混合應用程序。 在Xcode 9.4中運行代碼時,沒有問題。 升級到Xcode 11(以及請求升級到Swift 4.2)后,嘗試在Realm 0.93.2庫中引用已釋放實例時,該應用程序崩潰並顯示EXC_BAD_ACCESS錯誤。
以下是事件的順序:
@UIApplicationMain
class VGPAppDelegate: UIResponder, UIApplicationDelegate, BITCrashManagerDelegate, BITHockeyManagerDelegate {
var window: UIWindow?
internal func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
//trigger the ui appearance
VGPUIAppearance.triggerAppearance()
//setup network monitoring
TSReachabilityManager.default()
//Update Realm Scheme
VGPRealmMigrator.updateRealmSchema()
setUpHockeyApp()
setupAppearance()
if didCrashInLastSessionOnStartup() {
// Delay launch for sending the crash report
} else {
setupApplication()
}
return true
}
for (Class cls in s_localNameToClass.allValues) {
RLMObjectSchema *schema = [RLMObjectSchema
schemaForObjectClass:cls];
[schemaArray addObject:schema];
// override sharedSchema classs methods for performance
RLMReplaceSharedSchemaMethod(cls, schema);
// set standalone class on shared shema for standalone object creation
schema.standaloneClass = RLMStandaloneAccessorClassForObjectClass(schema.objectClass, schema);
}
free(classes);
注意:架構在此處> Realm> RLMSchema.mm> Intitialise中具有有效的指針
static Class RLMCreateAccessorClass(Class objectClass,
RLMObjectSchema *schema,
NSString *accessorClassPrefix,
IMP (*getterGetter)(RLMProperty *, RLMAccessorCode, NSString *),
IMP (*setterGetter)(RLMProperty *, RLMAccessorCode)) {
// throw if no schema, prefix, or object class
if (!objectClass || !schema || !accessorClassPrefix) {
@throw RLMException(@"Missing arguments");
}
if (!RLMIsKindOfClass(objectClass, RLMObjectBase.class)) {
@throw RLMException(@"objectClass must derive from RLMObject or Object");
}
// create and register proxy class which derives from object class
NSString *accessorClassName = [accessorClassPrefix stringByAppendingString:schema.className];
Class accClass = objc_getClass(accessorClassName.UTF8String);
if (!accClass) {
accClass = objc_allocateClassPair(objectClass, accessorClassName.UTF8String, 0);
objc_registerClassPair(accClass);
}
應用程序在包含引用schema.className的語句中崩潰。 架構在這里具有空指針。 僵屍顯示“郵件已發送到已釋放實例”。
我使用的是Realm的較舊版本(0.93.2)。 通過以下方式解決了該問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.