diff --git a/.DS_Store b/.DS_Store index 39ef797..c164359 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Ifish.xcodeproj/project.pbxproj b/Ifish.xcodeproj/project.pbxproj index 8807f37..c9b1419 100644 --- a/Ifish.xcodeproj/project.pbxproj +++ b/Ifish.xcodeproj/project.pbxproj @@ -260,16 +260,6 @@ 3D5C437321339F8F00E15B66 /* IfishChatView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D5C437221339F8F00E15B66 /* IfishChatView.m */; }; 3D8F649721568AE500F04BD3 /* ConnectHotspotTipViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E52B400321042ED2003BBA3E /* ConnectHotspotTipViewController.m */; }; 3D8F649A21571D7C00F04BD3 /* HitbarWifeVc.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F649921571D7C00F04BD3 /* HitbarWifeVc.m */; }; - 3D8F64B22157522100F04BD3 /* MJPropertyType.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64A02157522100F04BD3 /* MJPropertyType.m */; }; - 3D8F64B32157522100F04BD3 /* NSObject+MJKeyValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64A32157522100F04BD3 /* NSObject+MJKeyValue.m */; }; - 3D8F64B42157522100F04BD3 /* MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64A42157522100F04BD3 /* MJProperty.m */; }; - 3D8F64B52157522100F04BD3 /* NSObject+MJCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64A62157522100F04BD3 /* NSObject+MJCoding.m */; }; - 3D8F64B62157522100F04BD3 /* MJExtensionConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64A82157522100F04BD3 /* MJExtensionConst.m */; }; - 3D8F64B72157522100F04BD3 /* NSObject+MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64A92157522100F04BD3 /* NSObject+MJProperty.m */; }; - 3D8F64B82157522200F04BD3 /* NSObject+MJClass.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64AB2157522100F04BD3 /* NSObject+MJClass.m */; }; - 3D8F64B92157522200F04BD3 /* NSString+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64AC2157522100F04BD3 /* NSString+MJExtension.m */; }; - 3D8F64BA2157522200F04BD3 /* MJPropertyKey.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64AD2157522100F04BD3 /* MJPropertyKey.m */; }; - 3D8F64BB2157522200F04BD3 /* MJFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64B12157522100F04BD3 /* MJFoundation.m */; }; 3D8F64BE215752AF00F04BD3 /* IfishHeaterVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64BD215752AF00F04BD3 /* IfishHeaterVo.m */; }; 3D8F64C12157530000F04BD3 /* IfishHistroyVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64C02157530000F04BD3 /* IfishHistroyVo.m */; }; 3D8F64C42157791D00F04BD3 /* IfishBaseVc.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64C32157791D00F04BD3 /* IfishBaseVc.m */; }; @@ -2413,11 +2403,6 @@ CB7D6AC522966C6C0014E5C7 /* code_wechat_us.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = CB7D6AC422966C6B0014E5C7 /* code_wechat_us.jpeg */; }; CB7D6AE822969F090014E5C7 /* AppDelegate+AliPushConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = CB7D6AE622969F090014E5C7 /* AppDelegate+AliPushConfig.h */; }; CB7D6AE922969F090014E5C7 /* AppDelegate+AliPushConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = CB7D6AE722969F090014E5C7 /* AppDelegate+AliPushConfig.m */; }; - CB7D6AEC2296A1A40014E5C7 /* CloudPushSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB7D6AEB2296A1A40014E5C7 /* CloudPushSDK.framework */; }; - CB7D6AEE2296A2250014E5C7 /* AliyunEmasServices-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = CB7D6AED2296A2250014E5C7 /* AliyunEmasServices-Info.plist */; }; - CB7D6AF22296A6910014E5C7 /* UTDID.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB7D6AEF2296A68E0014E5C7 /* UTDID.framework */; }; - CB7D6AF32296A6910014E5C7 /* AlicloudUtils.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB7D6AF02296A6900014E5C7 /* AlicloudUtils.framework */; }; - CB7D6AF42296A6910014E5C7 /* UTMini.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB7D6AF12296A6910014E5C7 /* UTMini.framework */; }; CB8B6468230F7F980032EB24 /* IfishMainInfoCell.h in Headers */ = {isa = PBXBuildFile; fileRef = CB8B6466230F7F980032EB24 /* IfishMainInfoCell.h */; }; CB8B6469230F7F980032EB24 /* IfishMainInfoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CB8B6467230F7F980032EB24 /* IfishMainInfoCell.m */; }; CB8B646C230FAD340032EB24 /* Bugly.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB8B646B230FAD340032EB24 /* Bugly.framework */; }; @@ -2461,6 +2446,31 @@ CBA6169A22924F1E00ED380D /* MessageAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = CBA6169822924F1E00ED380D /* MessageAlertView.m */; }; CBA616A822928B1700ED380D /* UIButton+button.m in Sources */ = {isa = PBXBuildFile; fileRef = CBA616A722928B1700ED380D /* UIButton+button.m */; }; CBA616AB22928BCF00ED380D /* UIButton+button.h in Headers */ = {isa = PBXBuildFile; fileRef = CBA616AA22928BCE00ED380D /* UIButton+button.h */; }; + CBB0242F23517947002900D5 /* MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB0241A23517940002900D5 /* MJProperty.m */; }; + CBB0243023517947002900D5 /* MJFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB0241B23517941002900D5 /* MJFoundation.m */; }; + CBB0243123517947002900D5 /* MJFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = CBB0241C23517942002900D5 /* MJFoundation.h */; }; + CBB0243223517947002900D5 /* NSObject+MJProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = CBB0241D23517942002900D5 /* NSObject+MJProperty.h */; }; + CBB0243323517947002900D5 /* NSObject+MJKeyValue.h in Headers */ = {isa = PBXBuildFile; fileRef = CBB0241E23517943002900D5 /* NSObject+MJKeyValue.h */; }; + CBB0243423517947002900D5 /* NSObject+MJKeyValue.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB0241F23517943002900D5 /* NSObject+MJKeyValue.m */; }; + CBB0243523517947002900D5 /* NSString+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB0242023517943002900D5 /* NSString+MJExtension.m */; }; + CBB0243623517947002900D5 /* NSObject+MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB0242123517944002900D5 /* NSObject+MJProperty.m */; }; + CBB0243723517947002900D5 /* MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = CBB0242223517944002900D5 /* MJExtension.h */; }; + CBB0243823517947002900D5 /* NSObject+MJCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB0242323517944002900D5 /* NSObject+MJCoding.m */; }; + CBB0243923517947002900D5 /* MJPropertyKey.h in Headers */ = {isa = PBXBuildFile; fileRef = CBB0242423517944002900D5 /* MJPropertyKey.h */; }; + CBB0243A23517947002900D5 /* NSObject+MJClass.h in Headers */ = {isa = PBXBuildFile; fileRef = CBB0242523517944002900D5 /* NSObject+MJClass.h */; }; + CBB0243B23517947002900D5 /* MJPropertyKey.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB0242623517945002900D5 /* MJPropertyKey.m */; }; + CBB0243C23517947002900D5 /* NSObject+MJClass.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB0242723517945002900D5 /* NSObject+MJClass.m */; }; + CBB0243D23517947002900D5 /* MJExtensionConst.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB0242823517945002900D5 /* MJExtensionConst.m */; }; + CBB0243E23517947002900D5 /* NSString+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = CBB0242923517945002900D5 /* NSString+MJExtension.h */; }; + CBB0243F23517947002900D5 /* MJProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = CBB0242A23517945002900D5 /* MJProperty.h */; }; + CBB0244023517947002900D5 /* NSObject+MJCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = CBB0242B23517946002900D5 /* NSObject+MJCoding.h */; }; + CBB0244123517947002900D5 /* MJExtensionConst.h in Headers */ = {isa = PBXBuildFile; fileRef = CBB0242C23517946002900D5 /* MJExtensionConst.h */; }; + CBB0244223517947002900D5 /* MJPropertyType.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB0242D23517946002900D5 /* MJPropertyType.m */; }; + CBB0244323517947002900D5 /* MJPropertyType.h in Headers */ = {isa = PBXBuildFile; fileRef = CBB0242E23517946002900D5 /* MJPropertyType.h */; }; + CBB0244823518F3A002900D5 /* UTDID.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB0244423518F34002900D5 /* UTDID.framework */; }; + CBB0244923518F3A002900D5 /* UTMini.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB0244523518F36002900D5 /* UTMini.framework */; }; + CBB0244A23518F3A002900D5 /* AlicloudUtils.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB0244623518F38002900D5 /* AlicloudUtils.framework */; }; + CBB0244B23518F3A002900D5 /* CloudPushSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB0244723518F3A002900D5 /* CloudPushSDK.framework */; }; E51D7D4B208CD528001FF053 /* RuiMeiCHNameCustom.m in Sources */ = {isa = PBXBuildFile; fileRef = E51D7D4A208CD528001FF053 /* RuiMeiCHNameCustom.m */; }; E51D7D4E208CD5C8001FF053 /* RuiMeiCHControl.m in Sources */ = {isa = PBXBuildFile; fileRef = E51D7D4D208CD5C8001FF053 /* RuiMeiCHControl.m */; }; E51D7D51208CDB5B001FF053 /* RuiMeiSetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E51D7D50208CDB5B001FF053 /* RuiMeiSetViewController.m */; }; @@ -2851,27 +2861,6 @@ 3D5C437221339F8F00E15B66 /* IfishChatView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IfishChatView.m; sourceTree = ""; }; 3D8F649821571D7C00F04BD3 /* HitbarWifeVc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HitbarWifeVc.h; sourceTree = ""; }; 3D8F649921571D7C00F04BD3 /* HitbarWifeVc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HitbarWifeVc.m; sourceTree = ""; }; - 3D8F649D2157522100F04BD3 /* MJPropertyKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJPropertyKey.h; sourceTree = ""; }; - 3D8F649E2157522100F04BD3 /* NSObject+MJClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJClass.h"; sourceTree = ""; }; - 3D8F649F2157522100F04BD3 /* NSString+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MJExtension.h"; sourceTree = ""; }; - 3D8F64A02157522100F04BD3 /* MJPropertyType.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJPropertyType.m; sourceTree = ""; }; - 3D8F64A12157522100F04BD3 /* NSObject+MJProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJProperty.h"; sourceTree = ""; }; - 3D8F64A22157522100F04BD3 /* MJExtensionConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJExtensionConst.h; sourceTree = ""; }; - 3D8F64A32157522100F04BD3 /* NSObject+MJKeyValue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJKeyValue.m"; sourceTree = ""; }; - 3D8F64A42157522100F04BD3 /* MJProperty.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJProperty.m; sourceTree = ""; }; - 3D8F64A52157522100F04BD3 /* MJFoundation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJFoundation.h; sourceTree = ""; }; - 3D8F64A62157522100F04BD3 /* NSObject+MJCoding.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJCoding.m"; sourceTree = ""; }; - 3D8F64A72157522100F04BD3 /* MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJExtension.h; sourceTree = ""; }; - 3D8F64A82157522100F04BD3 /* MJExtensionConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJExtensionConst.m; sourceTree = ""; }; - 3D8F64A92157522100F04BD3 /* NSObject+MJProperty.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJProperty.m"; sourceTree = ""; }; - 3D8F64AA2157522100F04BD3 /* MJPropertyType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJPropertyType.h; sourceTree = ""; }; - 3D8F64AB2157522100F04BD3 /* NSObject+MJClass.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJClass.m"; sourceTree = ""; }; - 3D8F64AC2157522100F04BD3 /* NSString+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MJExtension.m"; sourceTree = ""; }; - 3D8F64AD2157522100F04BD3 /* MJPropertyKey.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJPropertyKey.m; sourceTree = ""; }; - 3D8F64AE2157522100F04BD3 /* MJProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJProperty.h; sourceTree = ""; }; - 3D8F64AF2157522100F04BD3 /* NSObject+MJKeyValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJKeyValue.h"; sourceTree = ""; }; - 3D8F64B02157522100F04BD3 /* NSObject+MJCoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJCoding.h"; sourceTree = ""; }; - 3D8F64B12157522100F04BD3 /* MJFoundation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJFoundation.m; sourceTree = ""; }; 3D8F64BC215752AF00F04BD3 /* IfishHeaterVo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IfishHeaterVo.h; sourceTree = ""; }; 3D8F64BD215752AF00F04BD3 /* IfishHeaterVo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IfishHeaterVo.m; sourceTree = ""; }; 3D8F64BF2157530000F04BD3 /* IfishHistroyVo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IfishHistroyVo.h; sourceTree = ""; }; @@ -5818,11 +5807,6 @@ CB7D6AC422966C6B0014E5C7 /* code_wechat_us.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = code_wechat_us.jpeg; sourceTree = ""; }; CB7D6AE622969F090014E5C7 /* AppDelegate+AliPushConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "AppDelegate+AliPushConfig.h"; sourceTree = ""; }; CB7D6AE722969F090014E5C7 /* AppDelegate+AliPushConfig.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "AppDelegate+AliPushConfig.m"; sourceTree = ""; }; - CB7D6AEB2296A1A40014E5C7 /* CloudPushSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CloudPushSDK.framework; sourceTree = ""; }; - CB7D6AED2296A2250014E5C7 /* AliyunEmasServices-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "AliyunEmasServices-Info.plist"; sourceTree = ""; }; - CB7D6AEF2296A68E0014E5C7 /* UTDID.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = UTDID.framework; sourceTree = ""; }; - CB7D6AF02296A6900014E5C7 /* AlicloudUtils.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AlicloudUtils.framework; sourceTree = ""; }; - CB7D6AF12296A6910014E5C7 /* UTMini.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = UTMini.framework; sourceTree = ""; }; CB7D6AF52296A6FF0014E5C7 /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; }; CB8B6466230F7F980032EB24 /* IfishMainInfoCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = IfishMainInfoCell.h; path = ../../IfishDeviceSelectList/IfishMainInfoCell.h; sourceTree = ""; }; CB8B6467230F7F980032EB24 /* IfishMainInfoCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = IfishMainInfoCell.m; path = ../../IfishDeviceSelectList/IfishMainInfoCell.m; sourceTree = ""; }; @@ -5867,6 +5851,31 @@ CBA6169822924F1E00ED380D /* MessageAlertView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessageAlertView.m; sourceTree = ""; }; CBA616A722928B1700ED380D /* UIButton+button.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+button.m"; sourceTree = ""; }; CBA616AA22928BCE00ED380D /* UIButton+button.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+button.h"; sourceTree = ""; }; + CBB0241A23517940002900D5 /* MJProperty.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJProperty.m; sourceTree = ""; }; + CBB0241B23517941002900D5 /* MJFoundation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJFoundation.m; sourceTree = ""; }; + CBB0241C23517942002900D5 /* MJFoundation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJFoundation.h; sourceTree = ""; }; + CBB0241D23517942002900D5 /* NSObject+MJProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJProperty.h"; sourceTree = ""; }; + CBB0241E23517943002900D5 /* NSObject+MJKeyValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJKeyValue.h"; sourceTree = ""; }; + CBB0241F23517943002900D5 /* NSObject+MJKeyValue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJKeyValue.m"; sourceTree = ""; }; + CBB0242023517943002900D5 /* NSString+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MJExtension.m"; sourceTree = ""; }; + CBB0242123517944002900D5 /* NSObject+MJProperty.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJProperty.m"; sourceTree = ""; }; + CBB0242223517944002900D5 /* MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJExtension.h; sourceTree = ""; }; + CBB0242323517944002900D5 /* NSObject+MJCoding.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJCoding.m"; sourceTree = ""; }; + CBB0242423517944002900D5 /* MJPropertyKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJPropertyKey.h; sourceTree = ""; }; + CBB0242523517944002900D5 /* NSObject+MJClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJClass.h"; sourceTree = ""; }; + CBB0242623517945002900D5 /* MJPropertyKey.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJPropertyKey.m; sourceTree = ""; }; + CBB0242723517945002900D5 /* NSObject+MJClass.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJClass.m"; sourceTree = ""; }; + CBB0242823517945002900D5 /* MJExtensionConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJExtensionConst.m; sourceTree = ""; }; + CBB0242923517945002900D5 /* NSString+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MJExtension.h"; sourceTree = ""; }; + CBB0242A23517945002900D5 /* MJProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJProperty.h; sourceTree = ""; }; + CBB0242B23517946002900D5 /* NSObject+MJCoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJCoding.h"; sourceTree = ""; }; + CBB0242C23517946002900D5 /* MJExtensionConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJExtensionConst.h; sourceTree = ""; }; + CBB0242D23517946002900D5 /* MJPropertyType.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJPropertyType.m; sourceTree = ""; }; + CBB0242E23517946002900D5 /* MJPropertyType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJPropertyType.h; sourceTree = ""; }; + CBB0244423518F34002900D5 /* UTDID.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = UTDID.framework; sourceTree = ""; }; + CBB0244523518F36002900D5 /* UTMini.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = UTMini.framework; sourceTree = ""; }; + CBB0244623518F38002900D5 /* AlicloudUtils.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AlicloudUtils.framework; sourceTree = ""; }; + CBB0244723518F3A002900D5 /* CloudPushSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CloudPushSDK.framework; sourceTree = ""; }; E51D7D49208CD528001FF053 /* RuiMeiCHNameCustom.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RuiMeiCHNameCustom.h; sourceTree = ""; }; E51D7D4A208CD528001FF053 /* RuiMeiCHNameCustom.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RuiMeiCHNameCustom.m; sourceTree = ""; }; E51D7D4C208CD5C8001FF053 /* RuiMeiCHControl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RuiMeiCHControl.h; sourceTree = ""; }; @@ -5967,7 +5976,6 @@ CB484CF122B87D250075F050 /* libresolv.tbd in Frameworks */, 18C54F202350541500DF4E7D /* AlibabaAuthSDK.framework in Frameworks */, 88C686401EA611AE004CDFD9 /* libsqlite3.tbd in Frameworks */, - CB7D6AF42296A6910014E5C7 /* UTMini.framework in Frameworks */, 3D4AFF5F21F34E1C0053BAA0 /* libstdc++.tbd in Frameworks */, 3D1C50B8221A9EDF0096AE43 /* YTargetAndAction.a in Frameworks */, 3D39D31C21F34946001C50B6 /* libbz2.tbd in Frameworks */, @@ -5986,6 +5994,7 @@ 88C686541EA61275004CDFD9 /* CFNetwork.framework in Frameworks */, 88C686521EA61267004CDFD9 /* CoreAudio.framework in Frameworks */, 18C54F282350541500DF4E7D /* UTMini.framework in Frameworks */, + CBB0244B23518F3A002900D5 /* CloudPushSDK.framework in Frameworks */, 18C54F232350541500DF4E7D /* SecurityGuardSDK.framework in Frameworks */, 3D1C50B0221A9EDF0096AE43 /* YMsgBox.a in Frameworks */, 88C686501EA61259004CDFD9 /* CoreLocation.framework in Frameworks */, @@ -6006,9 +6015,9 @@ 88C6863C1EA6116C004CDFD9 /* libxml2.tbd in Frameworks */, 88C6863A1EA61149004CDFD9 /* MapKit.framework in Frameworks */, 88C686381EA61138004CDFD9 /* OpenGLES.framework in Frameworks */, + CBB0244A23518F3A002900D5 /* AlicloudUtils.framework in Frameworks */, 88C686361EA61123004CDFD9 /* QuartzCore.framework in Frameworks */, 88C686341EA61114004CDFD9 /* SystemConfiguration.framework in Frameworks */, - CB7D6AF22296A6910014E5C7 /* UTDID.framework in Frameworks */, 88C686321EA61105004CDFD9 /* CoreFoundation.framework in Frameworks */, 88C686301EA610F4004CDFD9 /* Security.framework in Frameworks */, 88C6862E1EA610E5004CDFD9 /* JavaScriptCore.framework in Frameworks */, @@ -6028,17 +6037,16 @@ 88C686161EA60EB3004CDFD9 /* CoreText.framework in Frameworks */, 18C54F212350541500DF4E7D /* AlibcTradeSDK.framework in Frameworks */, 88C686141EA60EA9004CDFD9 /* WebKit.framework in Frameworks */, - CB7D6AF32296A6910014E5C7 /* AlicloudUtils.framework in Frameworks */, CB8B646C230FAD340032EB24 /* Bugly.framework in Frameworks */, 88C686011EA603A8004CDFD9 /* UShareUI.framework in Frameworks */, 88C685F91EA603A8004CDFD9 /* libSocialWeChat.a in Frameworks */, CB48209B2335CB2300A50C92 /* GWP2P.framework in Frameworks */, 3DD7AB4B21E2F2FB0064856A /* libzbar.a in Frameworks */, 88C685F61EA603A8004CDFD9 /* libSocialSina.a in Frameworks */, - CB7D6AEC2296A1A40014E5C7 /* CloudPushSDK.framework in Frameworks */, 88C685FF1EA603A8004CDFD9 /* libUMSocialLog.a in Frameworks */, 88C685FA1EA603A8004CDFD9 /* libWeChatSDK.a in Frameworks */, 881671BB1EA5DE2B00BEBF23 /* UMComDataStorage.framework in Frameworks */, + CBB0244923518F3A002900D5 /* UTMini.framework in Frameworks */, 883E7BCE1EA5FA1A00ED5D89 /* SMS_SDK.framework in Frameworks */, 88C685F71EA603A8004CDFD9 /* libWeiboSDK.a in Frameworks */, 881671BE1EA5DE2B00BEBF23 /* UMComNetwork.framework in Frameworks */, @@ -6053,6 +6061,7 @@ 88C685FD1EA603A8004CDFD9 /* UMSocialNetwork.framework in Frameworks */, 88C685F31EA603A8004CDFD9 /* libSocialQQ.a in Frameworks */, 883E7BCC1EA5FA1A00ED5D89 /* MOBFoundation.framework in Frameworks */, + CBB0244823518F3A002900D5 /* UTDID.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6619,27 +6628,27 @@ 3D8F649C2157522100F04BD3 /* MJExtension */ = { isa = PBXGroup; children = ( - 3D8F649D2157522100F04BD3 /* MJPropertyKey.h */, - 3D8F649E2157522100F04BD3 /* NSObject+MJClass.h */, - 3D8F649F2157522100F04BD3 /* NSString+MJExtension.h */, - 3D8F64A02157522100F04BD3 /* MJPropertyType.m */, - 3D8F64A12157522100F04BD3 /* NSObject+MJProperty.h */, - 3D8F64A22157522100F04BD3 /* MJExtensionConst.h */, - 3D8F64A32157522100F04BD3 /* NSObject+MJKeyValue.m */, - 3D8F64A42157522100F04BD3 /* MJProperty.m */, - 3D8F64A52157522100F04BD3 /* MJFoundation.h */, - 3D8F64A62157522100F04BD3 /* NSObject+MJCoding.m */, - 3D8F64A72157522100F04BD3 /* MJExtension.h */, - 3D8F64A82157522100F04BD3 /* MJExtensionConst.m */, - 3D8F64A92157522100F04BD3 /* NSObject+MJProperty.m */, - 3D8F64AA2157522100F04BD3 /* MJPropertyType.h */, - 3D8F64AB2157522100F04BD3 /* NSObject+MJClass.m */, - 3D8F64AC2157522100F04BD3 /* NSString+MJExtension.m */, - 3D8F64AD2157522100F04BD3 /* MJPropertyKey.m */, - 3D8F64AE2157522100F04BD3 /* MJProperty.h */, - 3D8F64AF2157522100F04BD3 /* NSObject+MJKeyValue.h */, - 3D8F64B02157522100F04BD3 /* NSObject+MJCoding.h */, - 3D8F64B12157522100F04BD3 /* MJFoundation.m */, + CBB0242223517944002900D5 /* MJExtension.h */, + CBB0242C23517946002900D5 /* MJExtensionConst.h */, + CBB0242823517945002900D5 /* MJExtensionConst.m */, + CBB0241C23517942002900D5 /* MJFoundation.h */, + CBB0241B23517941002900D5 /* MJFoundation.m */, + CBB0242A23517945002900D5 /* MJProperty.h */, + CBB0241A23517940002900D5 /* MJProperty.m */, + CBB0242423517944002900D5 /* MJPropertyKey.h */, + CBB0242623517945002900D5 /* MJPropertyKey.m */, + CBB0242E23517946002900D5 /* MJPropertyType.h */, + CBB0242D23517946002900D5 /* MJPropertyType.m */, + CBB0242523517944002900D5 /* NSObject+MJClass.h */, + CBB0242723517945002900D5 /* NSObject+MJClass.m */, + CBB0242B23517946002900D5 /* NSObject+MJCoding.h */, + CBB0242323517944002900D5 /* NSObject+MJCoding.m */, + CBB0241E23517943002900D5 /* NSObject+MJKeyValue.h */, + CBB0241F23517943002900D5 /* NSObject+MJKeyValue.m */, + CBB0241D23517942002900D5 /* NSObject+MJProperty.h */, + CBB0242123517944002900D5 /* NSObject+MJProperty.m */, + CBB0242923517945002900D5 /* NSString+MJExtension.h */, + CBB0242023517943002900D5 /* NSString+MJExtension.m */, ); path = MJExtension; sourceTree = ""; @@ -12419,11 +12428,10 @@ CB7D6AEA2296A1870014E5C7 /* AliPush */ = { isa = PBXGroup; children = ( - CB7D6AF02296A6900014E5C7 /* AlicloudUtils.framework */, - CB7D6AEF2296A68E0014E5C7 /* UTDID.framework */, - CB7D6AF12296A6910014E5C7 /* UTMini.framework */, - CB7D6AED2296A2250014E5C7 /* AliyunEmasServices-Info.plist */, - CB7D6AEB2296A1A40014E5C7 /* CloudPushSDK.framework */, + CBB0244623518F38002900D5 /* AlicloudUtils.framework */, + CBB0244723518F3A002900D5 /* CloudPushSDK.framework */, + CBB0244423518F34002900D5 /* UTDID.framework */, + CBB0244523518F36002900D5 /* UTMini.framework */, ); path = AliPush; sourceTree = ""; @@ -12637,6 +12645,7 @@ CB484E1322B8C8C90075F050 /* vaapi.h in Headers */, 3D1C50CC221A9EE00096AE43 /* MPNotificationView.h in Headers */, 3D1C50FF221A9EE00096AE43 /* YooseeCenterViewCell.h in Headers */, + CBB0243323517947002900D5 /* NSObject+MJKeyValue.h in Headers */, CB484CFF22B8B0D30075F050 /* Reachability.h in Headers */, CB484E0B22B8C8C80075F050 /* version.h in Headers */, CB484E1722B8C8C90075F050 /* dxva2.h in Headers */, @@ -12658,6 +12667,7 @@ 3D1C50E2221A9EE00096AE43 /* UDPManager.h in Headers */, 3D1C509A221A9EDF0096AE43 /* ConnectFailurePromptView.h in Headers */, CBA6168A228F9AB100ED380D /* ViewController+MASAdditions.h in Headers */, + CBB0244023517947002900D5 /* NSObject+MJCoding.h in Headers */, FA0892ED226C15000084A609 /* Xuanduo2DataUtility.h in Headers */, 3D1C50B7221A9EDF0096AE43 /* YTargetAndAction.h in Headers */, 3D1C510A221A9EE00096AE43 /* PlayBaseViewController.h in Headers */, @@ -12676,6 +12686,7 @@ CB484DEF22B8C8C80075F050 /* audio_fifo.h in Headers */, CBA61674228F9AB100ED380D /* MASCompositeConstraint.h in Headers */, 3D1C50CE221A9EE00096AE43 /* CustomTopBar.h in Headers */, + CBB0243F23517947002900D5 /* MJProperty.h in Headers */, CB484E0A22B8C8C80075F050 /* avstring.h in Headers */, 3D1C50DD221A9EE00096AE43 /* RecommendInfoDAO.h in Headers */, CB0F4E8722951A130091C76D /* SVIndefiniteAnimatedView.h in Headers */, @@ -12710,6 +12721,7 @@ CBA615FC228E8E5A00ED380D /* MyMessageViewController.h in Headers */, CB484E1522B8C8C90075F050 /* avfft.h in Headers */, CB484E0022B8C8C80075F050 /* channel_layout.h in Headers */, + CBB0243123517947002900D5 /* MJFoundation.h in Headers */, 3D1C512B221A9EE10096AE43 /* IfishCameraRecordfirstCell.h in Headers */, 402591952238D91400CE4900 /* UINavigationController+Config.h in Headers */, CB484DDF22B8C8C80075F050 /* fifo.h in Headers */, @@ -12727,6 +12739,7 @@ FA0892F52270BED00084A609 /* XuanduoHuliModel.h in Headers */, 3D1C50C7221A9EE00096AE43 /* LocalDevice.h in Headers */, 3D1C50A0221A9EDF0096AE43 /* TouchButton.h in Headers */, + CBB0243723517947002900D5 /* MJExtension.h in Headers */, 3D1C50F2221A9EE00096AE43 /* mesg.h in Headers */, CBA6169922924F1E00ED380D /* MessageAlertView.h in Headers */, CB484E0C22B8C8C80075F050 /* avio.h in Headers */, @@ -12735,6 +12748,7 @@ CBA61658228F9A6C00ED380D /* NSObject+YYModel.h in Headers */, 3D1C50C4221A9EE00096AE43 /* OBGradientView.h in Headers */, 3D1C509D221A9EDF0096AE43 /* GetContactMessageResult.h in Headers */, + CBB0243923517947002900D5 /* MJPropertyKey.h in Headers */, CBA61681228F9AB100ED380D /* NSLayoutConstraint+MASDebugAdditions.h in Headers */, 3D1C5109221A9EE00096AE43 /* P2PPlaybackController.h in Headers */, CB484DE422B8C8C80075F050 /* base64.h in Headers */, @@ -12779,6 +12793,7 @@ 3D1C512E221A9EE10096AE43 /* CameraBottomHView.h in Headers */, CB484E0E22B8C8C80075F050 /* version.h in Headers */, 3D1C50E4221A9EE00096AE43 /* config.h in Headers */, + CBB0243223517947002900D5 /* NSObject+MJProperty.h in Headers */, 3D1C5104221A9EE00096AE43 /* YooseConnectFirstViewController.h in Headers */, CB484E1E22B8C8C90075F050 /* P2PCInterface.h in Headers */, 3D1C5127221A9EE00096AE43 /* IfishCameraRecordSecondCell.h in Headers */, @@ -12791,10 +12806,14 @@ CB4820942334E99700A50C92 /* IQUITextFieldView+Additions.h in Headers */, 3D1C5139221A9EE10096AE43 /* FishControlSecondCell.h in Headers */, 3D1C50B2221A9EDF0096AE43 /* FounderButton.h in Headers */, + CBB0244323517947002900D5 /* MJPropertyType.h in Headers */, 3D1C509F221A9EDF0096AE43 /* YProgressView.h in Headers */, + CBB0243E23517947002900D5 /* NSString+MJExtension.h in Headers */, CB484E0822B8C8C80075F050 /* mathematics.h in Headers */, CB484E0F22B8C8C80075F050 /* swscale.h in Headers */, CBA616AB22928BCF00ED380D /* UIButton+button.h in Headers */, + CBB0244123517947002900D5 /* MJExtensionConst.h in Headers */, + CBB0243A23517947002900D5 /* NSObject+MJClass.h in Headers */, 3D1C5144221A9EE10096AE43 /* MonitorBootmView.h in Headers */, 3D1C50D3221A9EE00096AE43 /* UIScrollView+SVInfiniteScrolling.h in Headers */, CBA61655228F9A6C00ED380D /* YYModel.h in Headers */, @@ -13909,7 +13928,6 @@ 886FB19B1E5A9C1600256332 /* fishdoctor_iocn.png in Resources */, 882958161DC04ED200E9DDD7 /* equipment_button@3x.png in Resources */, 8874924F1E7BB58A00CDA284 /* gold_background.png in Resources */, - CB7D6AEE2296A2250014E5C7 /* AliyunEmasServices-Info.plist in Resources */, 887492301E7A90D000CDA284 /* fishdoctor_iocn__twentygold@2x.png in Resources */, 8829570B1DBDA3A300E9DDD7 /* ZhiLeng_off.png in Resources */, 8874923B1E7A90D000CDA284 /* fishdoctor_iocn_gold.png in Resources */, @@ -14331,7 +14349,6 @@ 883E79A31D48B0280030E075 /* shopNameCell.m in Sources */, 88F5EFB61D48D08100CC7CAF /* UIImageView+AFNetworking.m in Sources */, 88F5EFD71D48D08100CC7CAF /* MMRadialProgressView.m in Sources */, - 3D8F64B92157522200F04BD3 /* NSString+MJExtension.m in Sources */, 885C43B81E89F79D00685A2E /* WMMenuItem.m in Sources */, 881671DE1EA5DE2B00BEBF23 /* UMComUserProfileDetailView.m in Sources */, 883E79C81D48B0280030E075 /* SetTimeCell.m in Sources */, @@ -14356,7 +14373,6 @@ 883E799F1D48B0280030E075 /* BrandCell.m in Sources */, 883E78471D48A5E50030E075 /* KeLiAiSetViewController.m in Sources */, 883E76321D4897570030E075 /* baseModel.m in Sources */, - 3D8F64BA2157522200F04BD3 /* MJPropertyKey.m in Sources */, 883E786C1D48A5E50030E075 /* emptyInfoCollectionViewCell.m in Sources */, CB7D6AB822954FB90014E5C7 /* FuncUserDefault.m in Sources */, 3D1C50C2221A9EE00096AE43 /* CustomBorderButton.m in Sources */, @@ -14455,6 +14471,7 @@ 881672211EA5DE2B00BEBF23 /* UMComBriefEditView.m in Sources */, 881A1D4F1DD41AB000BA1AF4 /* MineKanEditSec1ThredCell.m in Sources */, 885C43BC1E89F79D00685A2E /* WMPageController.m in Sources */, + CBB0243C23517947002900D5 /* NSObject+MJClass.m in Sources */, 3D1C50FA221A9EE00096AE43 /* WaitingPageView.m in Sources */, 881671F31EA5DE2B00BEBF23 /* UMComHorizonMenuView.m in Sources */, 3DD7AB4F21E2F2FB0064856A /* QRCodeGenerator.m in Sources */, @@ -14478,6 +14495,7 @@ 88F5EFCD1D48D08100CC7CAF /* UIView+JHExtension.m in Sources */, 88613F741E5C1E86008D2C69 /* P2PShareViewFeedMessageCell.m in Sources */, 886185C71EF228E100459AD1 /* FourControlName.m in Sources */, + CBB0243523517947002900D5 /* NSString+MJExtension.m in Sources */, 881672251EA5DE2B00BEBF23 /* UMComSelectTopicViewController.m in Sources */, 3D1C5140221A9EE10096AE43 /* BootomViewSoketBackMasgConreol.m in Sources */, 883E78601D48A5E50030E075 /* LeftViewController.m in Sources */, @@ -14665,9 +14683,11 @@ 8816723A1EA5DE2B00BEBF23 /* UMComSimpleCommentViewController.m in Sources */, 3D1C17482171BB0700A159A8 /* PNRadarChartDataItem.m in Sources */, 8871C44B1E6D2A93000AA49F /* QianDaoGongLueViewCell.m in Sources */, + CBB0244223517947002900D5 /* MJPropertyType.m in Sources */, 8871FAA41EBC0CE30038E99A /* ShopCerProgressHeaderView.m in Sources */, 88602DBC1E10D97E00F3DB5D /* UIImage+WebP.m in Sources */, 88F5EFD81D48D08100CC7CAF /* MMVectorImage.m in Sources */, + CBB0243623517947002900D5 /* NSObject+MJProperty.m in Sources */, 883E79B81D48B0280030E075 /* remindCyclePic.m in Sources */, 88696FCF1E9C8872005D4AFB /* MemeberEditeViewCustomCell.m in Sources */, CB48204E2334D0A200A50C92 /* ConAquarChooseWiFiVC.m in Sources */, @@ -14702,10 +14722,8 @@ 881671D81EA5DE2B00BEBF23 /* UMComSysLikeTableViewCell.m in Sources */, 887069531D4EE8A600BCF675 /* PopCell.m in Sources */, 887491F31E7921E400CDA284 /* IfishInformationListViewCell.m in Sources */, - 3D8F64B22157522100F04BD3 /* MJPropertyType.m in Sources */, 88613F781E5C31E6008D2C69 /* XuanYanCellHCaculator.m in Sources */, 886FB18B1E5A977700256332 /* FishDoctorViewController.m in Sources */, - 3D8F64B32157522100F04BD3 /* NSObject+MJKeyValue.m in Sources */, 887491EF1E79082300CDA284 /* MineGoldModel.m in Sources */, 881671CF1EA5DE2B00BEBF23 /* UMComLocationView.m in Sources */, 883E78811D48A5E50030E075 /* ChangeMobleController.m in Sources */, @@ -14749,7 +14767,6 @@ 883E76421D4897570030E075 /* TimerSateModel.m in Sources */, CB484CF922B8B0AC0075F050 /* GCDAsyncUdpSocket.m in Sources */, 881869341D6FDD3B00CE9DFF /* ShopKanHuP2PViewController.m in Sources */, - 3D8F64B52157522100F04BD3 /* NSObject+MJCoding.m in Sources */, CBA6168C228F9AB100ED380D /* MASViewAttribute.m in Sources */, 88602DB91E10D97E00F3DB5D /* UIButton+WebCache.m in Sources */, 883E762F1D4897570030E075 /* TemperatureSetModel.m in Sources */, @@ -14762,6 +14779,7 @@ 3D1C50DF221A9EE00096AE43 /* MessageDAO.m in Sources */, 88605F1C1D8256600037F1AA /* ShareReportCell.m in Sources */, 881672051EA5DE2B00BEBF23 /* UMComSegmentedControl.m in Sources */, + CBB0243B23517947002900D5 /* MJPropertyKey.m in Sources */, 88F5EFC91D48D08100CC7CAF /* JHRefreshFooterView.m in Sources */, 88645B161E83B7EC00234DB4 /* IfishInfoDetailContentViewCell.m in Sources */, 404D7CEA2238CF77005655F5 /* UIViewController+Swizzling.m in Sources */, @@ -14784,7 +14802,6 @@ 883E76241D4897570030E075 /* DropViewModel.m in Sources */, 8891330A1ECE999A00F52EBC /* IfishShopGoodsVideoRecordViewController.m in Sources */, 88380DA91EB1A14900FC7C0D /* IfishGoodsManageViewController.m in Sources */, - 3D8F64BB2157522200F04BD3 /* MJFoundation.m in Sources */, 8860D79D1D6D91A2001E544C /* ShopEditViewController.m in Sources */, 886B80731D63112000E1B9B3 /* CertificationViewSecondCell.m in Sources */, 881671C21EA5DE2B00BEBF23 /* UMComRequestTableViewController.m in Sources */, @@ -14917,6 +14934,7 @@ 88D0F27D1EA6F53E00286022 /* IfishSetViewController.m in Sources */, 885FBDE41E4C3DE400E0D7D1 /* ShopNotCertifyViewCell.m in Sources */, 8841D5BA1EE7A914007B0025 /* RunSunCHNameCustom.m in Sources */, + CBB0243023517947002900D5 /* MJFoundation.m in Sources */, 883E76451D4897570030E075 /* ZeroControlBackmsgModel.m in Sources */, 889133041ECE999A00F52EBC /* ArtPlayerView.m in Sources */, 881A1D371DD3025400BA1AF4 /* MineKankanEditViewController.m in Sources */, @@ -14927,6 +14945,7 @@ 88F5EFD01D48D08100CC7CAF /* MMLinearProgressView.m in Sources */, 88F5EFAF1D48D08100CC7CAF /* AFURLRequestSerialization.m in Sources */, 880707AA1DE2D53E0076F65A /* UITextView+AddKeybordDoneVIew.m in Sources */, + CBB0243823517947002900D5 /* NSObject+MJCoding.m in Sources */, 88F5EFC81D48D08100CC7CAF /* JHRefreshConfig.m in Sources */, 880707F61DE302630076F65A /* LXColorTools.m in Sources */, 3D1C50EE221A9EE00096AE43 /* PAIOUnit.m in Sources */, @@ -14947,6 +14966,7 @@ 8807074F1DDD42E60076F65A /* P2PShareViewTh3Cell.m in Sources */, CB484E1D22B8C8C90075F050 /* FfmpegInterface.m in Sources */, 883E76411D4897570030E075 /* ThreeControlBackbackmsgModel.m in Sources */, + CBB0243D23517947002900D5 /* MJExtensionConst.m in Sources */, 886484161EE165ED0046C3BD /* RunSunChangeNameViewController.m in Sources */, 88602DB01E10D97E00F3DB5D /* MKAnnotationView+WebCache.m in Sources */, 8871C4461E6D2819000AA49F /* QianDaoWayTitleViewCell.m in Sources */, @@ -15009,6 +15029,7 @@ 883E78571D48A5E50030E075 /* JiaReWenDuModel.m in Sources */, 883E76341D4897570030E075 /* backAppLoginModel.m in Sources */, 887491CF1E77DA8A00CDA284 /* IfishMineGoldViewController.m in Sources */, + CBB0242F23517947002900D5 /* MJProperty.m in Sources */, 887B73381E235BDA00CECB73 /* JuNengProtocol.m in Sources */, 3D3447A5212D1C3800CF3941 /* IfishHotBarVo.m in Sources */, 881672191EA5DE2B00BEBF23 /* UMComSimpleHorizonMenuView.m in Sources */, @@ -15021,7 +15042,6 @@ CB0F4E8922951A130091C76D /* SVProgressAnimatedView.m in Sources */, 881671C31EA5DE2B00BEBF23 /* UMComViewController.m in Sources */, E567026D21187E7C00E61993 /* ConnectHotspotModel.m in Sources */, - 3D8F64B72157522100F04BD3 /* NSObject+MJProperty.m in Sources */, 883E785D1D48A5E50030E075 /* XuToWenDuPicview.m in Sources */, CBA61682228F9AB100ED380D /* MASCompositeConstraint.m in Sources */, 880707F51DE302630076F65A /* LXActionView.m in Sources */, @@ -15064,7 +15084,6 @@ 881671F91EA5DE2B00BEBF23 /* UMComMutiTextRun.m in Sources */, 88C1B1F81DCB021300C2C99A /* FormatTankAddCamera.m in Sources */, 8815D1211DF8083700BEA2DA /* IfishHelperUtils.m in Sources */, - 3D8F64B62157522100F04BD3 /* MJExtensionConst.m in Sources */, 883E79BC1D48B0280030E075 /* BrightnessCell.m in Sources */, 883E78381D48A5E50030E075 /* MorShopViewController.m in Sources */, 881671A21EA5DE2B00BEBF23 /* UMComNoticeListDataController..m in Sources */, @@ -15100,7 +15119,6 @@ 3D1C50D7221A9EE00096AE43 /* CustomView.m in Sources */, 886512001E972FDD00BABDF1 /* IfishUserDataUnity.m in Sources */, 3D1C508F221A9EDF0096AE43 /* LoginResult.m in Sources */, - 3D8F64B42157522100F04BD3 /* MJProperty.m in Sources */, 882A75FD1EBAF2DB00AD1D15 /* IfishShopCerNewViewController.m in Sources */, 8816721E1EA5DE2B00BEBF23 /* UMComSimplicityUserInfoBar.m in Sources */, 883E76251D4897570030E075 /* ChatroomModel.m in Sources */, @@ -15122,6 +15140,7 @@ 881671A71EA5DE2B00BEBF23 /* UMComTopicDataController.m in Sources */, 881671F81EA5DE2B00BEBF23 /* UMComMutiText.m in Sources */, 3D1C50A5221A9EDF0096AE43 /* CyclePickerView.m in Sources */, + CBB0243423517947002900D5 /* NSObject+MJKeyValue.m in Sources */, 883E762B1D4897570030E075 /* setModel.m in Sources */, CB48207B2334E99700A50C92 /* IQTextView.m in Sources */, 881672151EA5DE2B00BEBF23 /* UMComSimpleCommentEditView.m in Sources */, @@ -15198,7 +15217,6 @@ 88602DB31E10D97E00F3DB5D /* SDWebImageCompat.m in Sources */, 88C1B2C51DD19CE000C2C99A /* KankanListCollectionViewCell.m in Sources */, 881A1D701DD5C46A00BA1AF4 /* KanKanListTableCell.m in Sources */, - 3D8F64B82157522200F04BD3 /* NSObject+MJClass.m in Sources */, 881671D91EA5DE2B00BEBF23 /* UMComSysPrivateLetterCell.m in Sources */, 883283611EAF21B500A47157 /* IfishGoldCoastViewController.m in Sources */, 88696FB51E9C69B1005D4AFB /* MemberNanageListData.m in Sources */, @@ -15406,7 +15424,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 10.1.3; + CURRENT_PROJECT_VERSION = 10.1.7; DEVELOPMENT_TEAM = WFX8GD5HFX; ENABLE_BITCODE = NO; ENABLE_TESTABILITY = YES; @@ -15523,7 +15541,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 10.1.3; + CURRENT_PROJECT_VERSION = 10.1.7; DEVELOPMENT_TEAM = WFX8GD5HFX; ENABLE_BITCODE = NO; ENABLE_TESTABILITY = YES; diff --git a/Ifish/AliPush/AlicloudUtils.framework/AlicloudUtils b/Ifish/AliPush/AlicloudUtils.framework/AlicloudUtils index 4d051ef..8b24a14 100644 Binary files a/Ifish/AliPush/AlicloudUtils.framework/AlicloudUtils and b/Ifish/AliPush/AlicloudUtils.framework/AlicloudUtils differ diff --git a/Ifish/AliPush/AlicloudUtils.framework/Headers/AlicloudUtils.h b/Ifish/AliPush/AlicloudUtils.framework/Headers/AlicloudUtils.h index 4fe19a3..fdb2bf4 100644 --- a/Ifish/AliPush/AlicloudUtils.framework/Headers/AlicloudUtils.h +++ b/Ifish/AliPush/AlicloudUtils.framework/Headers/AlicloudUtils.h @@ -8,7 +8,7 @@ #import -#define ALICLOUDUTILS_VERSION @"1.3.6" +#define ALICLOUDUTILS_VERSION @"1.3.7" // In this header, you should import all the public headers of your framework using statements like #import diff --git a/Ifish/AliPush/AlicloudUtils.framework/Headers/EMASOptions.h b/Ifish/AliPush/AlicloudUtils.framework/Headers/EMASOptions.h index c38d9bd..8cce9d5 100644 --- a/Ifish/AliPush/AlicloudUtils.framework/Headers/EMASOptions.h +++ b/Ifish/AliPush/AlicloudUtils.framework/Headers/EMASOptions.h @@ -24,6 +24,7 @@ @property (nonatomic, copy, readonly) NSString *emasBundleId; @property (nonatomic, copy, readonly) NSString *hotfixIdSecret; @property (nonatomic, copy, readonly) NSString *hotfixRsaSecret; +@property (nonatomic, copy, readonly) NSString *tlogRsaSecret; @property (nonatomic, copy, readonly) NSString *httpdnsAccountId; @property (nonatomic, copy, readonly) NSString *httpdnsSecretKey; diff --git a/Ifish/AliPush/AliyunEmasServices-Info.plist b/Ifish/AliPush/AliyunEmasServices-Info.plist deleted file mode 100644 index 4af4406..0000000 --- a/Ifish/AliPush/AliyunEmasServices-Info.plist +++ /dev/null @@ -1,54 +0,0 @@ - - - - - config - - emas.appKey - 26007228 - emas.appSecret - 87c9206424399968ba11a56a9a979cfe - emas.bundleId - com.shyuying.Ifish8 - hotfix.idSecret - 26007228-2 - hotfix.rsaSecret - MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDE/Dfk9Fy5WaLfhkAmCe9s1L6gh8ZIpwEetLtVUvTsIiGFei0lmn//GfPawGK104cr55P1+1zhXd5OyfIflo33WPb7KmByssbNW06AqAbDx83dtL21+eRXMvs4U+IbmrSY7GCs3/EJW9mPr6LKkF+K5n4AiQH7ecctGXY4XYomnFF83lutyTt7C5HfZb5cDbDkfOhA0UYse+WW3hs7nhgMOClFvoZelMd1PeciondG/cEfRRzbNdueiwVBQsGz7SLzrD5vnG5uyZrmPnCstc8ijKkimwvepadzjC11kE83M5XZyIwIPVOvXtKGBDQQgVLECmBmAp+72TySTt84ek51AgMBAAECggEATQDXjL3lnWMn4z8kxnntyVpk5nYNEguOyYUXEiSqr8Ar4HTBP0jlLkDj7ah1LeTxmz0cvvSy+zppk90ntCdzebSiX87SAyRVyKMfzfVhJ5lspXVpD8EO/PNl9z/7TJUucfU9WXb1T5ZDNwMOnSbQ4oh1yxnD151kOgIRD7mpLqwO7I/hh7axVZsNv8nVBT3eqydN4Eu32yBfFTClmNlSLBkz+c5FLhahKemYuHX0Nv9f7NG1p3x/Mh48LPas/Oy+YHOaYYW/AVgipRQxcjq2nDHBak37clzelF2adftWFPgy6gIO0n64mW7/ajAfMq72RCF1I3fIfgrvrBrKQ5dMYQKBgQDtTJJ9ykHuAbh16sok44tJgtAgIjWHQmIOB1EOXf1NaK8hT325dghohjb7DG6NqzIkM9ki60NCnGPREeaQ2JNWQzJxuzm3lFJsO3zHGfPZsZNRPM8nENial4y3AO4UDnvBWtT0nQ2ZdaxrDC4kZeHhnPj1SH32OWUBsGeNbHNeHQKBgQDUglPR5tgFsbgKbhoRSoO+ZY/z68pHmsR+SAlo+38qkstAT11RxCWxy/m3NyQ/Vd8RvbB7EcqAKSPQPLjArJF0iva9EzGnyJ4NtZcPCzJY0YdXhG9Lg6SSI1pln0tI9KyFBdd5WwDFdypRFKfpXesL4HkjhOmJpR0v/XfwQWyiOQKBgQCrhdyhVe//5Hh7q0GAFoVYllhv0apVYXNU5o79TozIRjHIZxfeVWXQf6sAHcVPW3470spRxjHw1PAFb+XzrsgY4yt0L7uRaYGGQB16INU09nkgkE6/0xpt67tHkEGGd82WPlyNj3QEB52gJsa3gnkaRgdh7Is3zdanuOWwwMJHNQKBgQDC0HdnBekjzziY1zaug1EjSpgdVRuraQaZfhCiXWzG6qvJ2PgD7X1g8U2L2NEx/tbwvKT9LeIme5CJZiE5APqXjI2F6AKtfgznJIHHGMye//bDFHWzFIvaLO7CGrY5u5Qsnp5ackLSw9vXWMhV9/Nyf+aN2Vr/BI8tX4CEkHW2gQKBgQCR5c+2oCPWgtXxwXoSk5yqs9yTzgtsiX0rlGSuaUpdRwKQvTqUex9SVXrPu+Hx2ZgaLm/XFVCmeftMteaWZ3NXQZyeKIVxpiQFlggCBHr5oaHqYvFZbCMCK8JN3w8EpRoiZxVpaqpdbMFHWxoqH64tmjKsNoB1CsRPnkGxo48Cnw== - httpdns.accountId - 139960 - httpdns.secretKey - 9ff868c992944f68a2a8929bc09e9f41 - - services - - httpdns_service - - status - 1 - version - 1.7.3 - - cps_service - - status - 1 - version - 1.9.8 - - feedback_service - - status - 1 - version - 3.3.6 - - man_service - - status - 0 - version - 1.0.13 - - - - diff --git a/Ifish/AliPush/CloudPushSDK.framework/CloudPushSDK b/Ifish/AliPush/CloudPushSDK.framework/CloudPushSDK index 53045ea..c54ad19 100644 Binary files a/Ifish/AliPush/CloudPushSDK.framework/CloudPushSDK and b/Ifish/AliPush/CloudPushSDK.framework/CloudPushSDK differ diff --git a/Ifish/AliPush/CloudPushSDK.framework/Headers/CloudPushSDK.h b/Ifish/AliPush/CloudPushSDK.framework/Headers/CloudPushSDK.h index 4f7966c..ac254f3 100644 --- a/Ifish/AliPush/CloudPushSDK.framework/Headers/CloudPushSDK.h +++ b/Ifish/AliPush/CloudPushSDK.framework/Headers/CloudPushSDK.h @@ -11,7 +11,7 @@ #import "MPGerneralDefinition.h" /* SDK版本号 */ -#define MPUSH_IOS_SDK_VERSION @"1.9.8" +#define MPUSH_IOS_SDK_VERSION @"1.9.9" @interface CloudPushSDK : NSObject diff --git a/Ifish/AliPush/UTMini.framework/Headers/UT.h b/Ifish/AliPush/UTMini.framework/Headers/UT.h index 7453d1a..64e2182 100644 --- a/Ifish/AliPush/UTMini.framework/Headers/UT.h +++ b/Ifish/AliPush/UTMini.framework/Headers/UT.h @@ -24,6 +24,6 @@ * pageEnter来处理,funcType=2101,则调用ctrlClicked处理 * */ -+(void) h5UT:(NSDictionary *) dataDict view:(UIWebView *) pView viewController:(UIViewController *) pViewController; ++(void) h5UT:(NSDictionary *) dataDict view:(UIView *) pView viewController:(UIViewController *) pViewController; @end diff --git a/Ifish/AliPush/UTMini.framework/UTMini b/Ifish/AliPush/UTMini.framework/UTMini index 7d70591..5f10222 100644 Binary files a/Ifish/AliPush/UTMini.framework/UTMini and b/Ifish/AliPush/UTMini.framework/UTMini differ diff --git a/Ifish/Info.plist b/Ifish/Info.plist index cccffae..1fd7fe7 100644 --- a/Ifish/Info.plist +++ b/Ifish/Info.plist @@ -70,7 +70,7 @@ CFBundleVersion - 10.1.5 + $(CURRENT_PROJECT_VERSION) ITSAppUsesNonExemptEncryption LSApplicationCategoryType diff --git a/Ifish/controllers/ConnectAauariumVC/ConAquarChooseWiFiVC.m b/Ifish/controllers/ConnectAauariumVC/ConAquarChooseWiFiVC.m index 61dabf5..f35d4f9 100644 --- a/Ifish/controllers/ConnectAauariumVC/ConAquarChooseWiFiVC.m +++ b/Ifish/controllers/ConnectAauariumVC/ConAquarChooseWiFiVC.m @@ -102,6 +102,11 @@ Assign BOOL isGoChangeWiFi;//更换为设备的WiFi -(void)checkWiFi{ NSDictionary *ifs = [self getSSIDInfo]; NSString *wifiName = [ifs objectForKey:@"SSID"]; + //先判断之前的wifi名称是否和热点的wifi名称重复,如果冲突,则提示wifi名称错误 + if ([wifiName isEqualToString:self.wifiName]) { + [self.view makeToast:@"请先连接设备热点"]; + return; + } if ([wifiName rangeOfString:@"ifish"].location!=NSNotFound) { //wifi正确,则尝试连接设备 ConnectingAquarVC *connecting = InitObject(ConnectingAquarVC); diff --git a/Ifish/controllers/ConnectAauariumVC/ConAquarNowWiFiPwdVC.m b/Ifish/controllers/ConnectAauariumVC/ConAquarNowWiFiPwdVC.m index 5a135ca..5526501 100644 --- a/Ifish/controllers/ConnectAauariumVC/ConAquarNowWiFiPwdVC.m +++ b/Ifish/controllers/ConnectAauariumVC/ConAquarNowWiFiPwdVC.m @@ -112,7 +112,6 @@ Strong UIButton *nextBtn; _wifiPwdTextField.keyboardType = UIKeyboardTypeAlphabet; _wifiPwdTextField.delegate = self; _wifiPwdTextField.backgroundColor = XWhite; - _wifiPwdTextField.secureTextEntry = YES; _wifiPwdTextField.layer.masksToBounds = YES; _wifiPwdTextField.layer.cornerRadius = kSizeFrom750(10); _wifiPwdTextField.leftViewMode = UITextFieldViewModeAlways; @@ -160,7 +159,7 @@ Strong UIButton *nextBtn; -(void)addContentLabel{ UILabel *preLabel; - NSArray *textArr = @[@"1.选择信号较强的2.4G WiFi,将设备和手机尽量靠近路由器,正确填写WiFi密码即可快速让设备联备;",@"2.设备暂不支持5G WiFi,若已连接,请切换2.4G WiFi;",@"3.路由器不能开启如AP隔离、防蹭网、WLAN助手等限制WiFi接入的选项;",@"4.设备暂不支持WAP/WPA2 企业级WiFi,若已连接,请切换其他WiFi。"]; + NSArray *textArr = @[@"1.选择信号较强的2.4G WiFi,将设备和手机尽量靠近路由器,正确填写WiFi密码即可快速让设备联网;",@"2.设备暂不支持5G WiFi,若已连接,请切换2.4G WiFi;",@"3.路由器不能开启如AP隔离、防蹭网、WLAN助手等限制WiFi接入的选项;",@"4.设备暂不支持WAP/WPA2 企业级WiFi,若已连接,请切换其他WiFi。"]; for (int i=3; i>=0; i--) { UILabel *label = InitObject(UILabel); label.text = textArr[i]; diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJExtension.h b/Ifish/controllers/HotBar/Lib/MJExtension/MJExtension.h index ad35d09..f2ede55 100755 --- a/Ifish/controllers/HotBar/Lib/MJExtension/MJExtension.h +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJExtension.h @@ -4,12 +4,24 @@ // // Created by mj on 14-1-15. // Copyright (c) 2014年 小码哥. All rights reserved. -// 代码地址:https://github.com/CoderMJLee/MJExtension -// 代码地址:http://code4app.com/ios/%E5%AD%97%E5%85%B8-JSON-%E4%B8%8E%E6%A8%A1%E5%9E%8B%E7%9A%84%E8%BD%AC%E6%8D%A2/5339992a933bf062608b4c57 +// +#import #import "NSObject+MJCoding.h" #import "NSObject+MJProperty.h" #import "NSObject+MJClass.h" #import "NSObject+MJKeyValue.h" #import "NSString+MJExtension.h" -#import "MJExtensionConst.h" \ No newline at end of file +#import "MJExtensionConst.h" + +#import "MJFoundation.h" + +//! Project version number for MJExtension. +FOUNDATION_EXPORT double MJExtensionVersionNumber; + +//! Project version string for MJExtension. +FOUNDATION_EXPORT const unsigned char MJExtensionVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJExtensionConst.h b/Ifish/controllers/HotBar/Lib/MJExtension/MJExtensionConst.h old mode 100644 new mode 100755 index ba8893a..ea37330 --- a/Ifish/controllers/HotBar/Lib/MJExtension/MJExtensionConst.h +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJExtensionConst.h @@ -4,6 +4,25 @@ #import +#ifndef MJ_LOCK +#define MJ_LOCK(lock) dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER); +#endif + +#ifndef MJ_UNLOCK +#define MJ_UNLOCK(lock) dispatch_semaphore_signal(lock); +#endif + +// 信号量 +#define MJExtensionSemaphoreCreate \ +static dispatch_semaphore_t signalSemaphore; \ +static dispatch_once_t onceTokenSemaphore; \ +dispatch_once(&onceTokenSemaphore, ^{ \ + signalSemaphore = dispatch_semaphore_create(1); \ +}); + +#define MJExtensionSemaphoreWait MJ_LOCK(signalSemaphore) +#define MJExtensionSemaphoreSignal MJ_UNLOCK(signalSemaphore) + // 过期 #define MJExtensionDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead) @@ -58,31 +77,38 @@ MJExtensionAssert2((param) != nil, returnValue) * 打印所有的属性 */ #define MJLogAllIvars \ --(NSString *)description \ +- (NSString *)description \ { \ return [self mj_keyValues].description; \ } #define MJExtensionLogAllProperties MJLogAllIvars +/** 仅在 Debugger 展示所有的属性 */ +#define MJImplementDebugDescription \ +- (NSString *)debugDescription \ +{ \ +return [self mj_keyValues].debugDescription; \ +} + /** * 类型(属性类型) */ -extern NSString *const MJPropertyTypeInt; -extern NSString *const MJPropertyTypeShort; -extern NSString *const MJPropertyTypeFloat; -extern NSString *const MJPropertyTypeDouble; -extern NSString *const MJPropertyTypeLong; -extern NSString *const MJPropertyTypeLongLong; -extern NSString *const MJPropertyTypeChar; -extern NSString *const MJPropertyTypeBOOL1; -extern NSString *const MJPropertyTypeBOOL2; -extern NSString *const MJPropertyTypePointer; +FOUNDATION_EXPORT NSString *const MJPropertyTypeInt; +FOUNDATION_EXPORT NSString *const MJPropertyTypeShort; +FOUNDATION_EXPORT NSString *const MJPropertyTypeFloat; +FOUNDATION_EXPORT NSString *const MJPropertyTypeDouble; +FOUNDATION_EXPORT NSString *const MJPropertyTypeLong; +FOUNDATION_EXPORT NSString *const MJPropertyTypeLongLong; +FOUNDATION_EXPORT NSString *const MJPropertyTypeChar; +FOUNDATION_EXPORT NSString *const MJPropertyTypeBOOL1; +FOUNDATION_EXPORT NSString *const MJPropertyTypeBOOL2; +FOUNDATION_EXPORT NSString *const MJPropertyTypePointer; -extern NSString *const MJPropertyTypeIvar; -extern NSString *const MJPropertyTypeMethod; -extern NSString *const MJPropertyTypeBlock; -extern NSString *const MJPropertyTypeClass; -extern NSString *const MJPropertyTypeSEL; -extern NSString *const MJPropertyTypeId; +FOUNDATION_EXPORT NSString *const MJPropertyTypeIvar; +FOUNDATION_EXPORT NSString *const MJPropertyTypeMethod; +FOUNDATION_EXPORT NSString *const MJPropertyTypeBlock; +FOUNDATION_EXPORT NSString *const MJPropertyTypeClass; +FOUNDATION_EXPORT NSString *const MJPropertyTypeSEL; +FOUNDATION_EXPORT NSString *const MJPropertyTypeId; -#endif \ No newline at end of file +#endif diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJExtensionConst.m b/Ifish/controllers/HotBar/Lib/MJExtension/MJExtensionConst.m old mode 100644 new mode 100755 diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJFoundation.h b/Ifish/controllers/HotBar/Lib/MJExtension/MJFoundation.h old mode 100644 new mode 100755 index 8a0e457..f2c1967 --- a/Ifish/controllers/HotBar/Lib/MJExtension/MJFoundation.h +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJFoundation.h @@ -9,5 +9,8 @@ #import @interface MJFoundation : NSObject + + (BOOL)isClassFromFoundation:(Class)c; ++ (BOOL)isFromNSObjectProtocolProperty:(NSString *)propertyName; + @end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJFoundation.m b/Ifish/controllers/HotBar/Lib/MJExtension/MJFoundation.m old mode 100644 new mode 100755 index 23a7d8c..31e107d --- a/Ifish/controllers/HotBar/Lib/MJExtension/MJFoundation.m +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJFoundation.m @@ -9,35 +9,32 @@ #import "MJFoundation.h" #import "MJExtensionConst.h" #import - -static NSSet *foundationClasses_; +#import "objc/runtime.h" @implementation MJFoundation -+ (NSSet *)foundationClasses -{ - if (foundationClasses_ == nil) { - // 集合中没有NSObject,因为几乎所有的类都是继承自NSObject,具体是不是NSObject需要特殊判断 - foundationClasses_ = [NSSet setWithObjects: - [NSURL class], - [NSDate class], - [NSValue class], - [NSData class], - [NSError class], - [NSArray class], - [NSDictionary class], - [NSString class], - [NSAttributedString class], nil]; - } - return foundationClasses_; -} - + (BOOL)isClassFromFoundation:(Class)c { if (c == [NSObject class] || c == [NSManagedObject class]) return YES; + static NSSet *foundationClasses; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + // 集合中没有NSObject,因为几乎所有的类都是继承自NSObject,具体是不是NSObject需要特殊判断 + foundationClasses = [NSSet setWithObjects: + [NSURL class], + [NSDate class], + [NSValue class], + [NSData class], + [NSError class], + [NSArray class], + [NSDictionary class], + [NSString class], + [NSAttributedString class], nil]; + }); + __block BOOL result = NO; - [[self foundationClasses] enumerateObjectsUsingBlock:^(Class foundationClass, BOOL *stop) { + [foundationClasses enumerateObjectsUsingBlock:^(Class foundationClass, BOOL *stop) { if ([c isSubclassOfClass:foundationClass]) { result = YES; *stop = YES; @@ -45,4 +42,29 @@ static NSSet *foundationClasses_; }]; return result; } + ++ (BOOL)isFromNSObjectProtocolProperty:(NSString *)propertyName +{ + if (!propertyName) return NO; + + static NSSet *objectProtocolPropertyNames; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + unsigned int count = 0; + objc_property_t *propertyList = protocol_copyPropertyList(@protocol(NSObject), &count); + NSMutableSet *propertyNames = [NSMutableSet setWithCapacity:count]; + for (int i = 0; i < count; i++) { + objc_property_t property = propertyList[i]; + NSString *propertyName = [NSString stringWithCString:property_getName(property) encoding:NSUTF8StringEncoding]; + if (propertyName) { + [propertyNames addObject:propertyName]; + } + } + objectProtocolPropertyNames = [propertyNames copy]; + free(propertyList); + }); + + return [objectProtocolPropertyNames containsObject:propertyName]; +} + @end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJProperty.h b/Ifish/controllers/HotBar/Lib/MJExtension/MJProperty.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJProperty.m b/Ifish/controllers/HotBar/Lib/MJExtension/MJProperty.m old mode 100644 new mode 100755 index 96710fa..5d9a1e5 --- a/Ifish/controllers/HotBar/Lib/MJExtension/MJProperty.m +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJProperty.m @@ -10,10 +10,13 @@ #import "MJFoundation.h" #import "MJExtensionConst.h" #import +#include "TargetConditionals.h" @interface MJProperty() @property (strong, nonatomic) NSMutableDictionary *propertyKeysDict; @property (strong, nonatomic) NSMutableDictionary *objectClassInArrayDict; +@property (strong, nonatomic) dispatch_semaphore_t propertyKeysLock; +@property (strong, nonatomic) dispatch_semaphore_t objectClassInArrayLock; @end @implementation MJProperty @@ -24,6 +27,8 @@ if (self = [super init]) { _propertyKeysDict = [NSMutableDictionary dictionary]; _objectClassInArrayDict = [NSMutableDictionary dictionary]; + _propertyKeysLock = dispatch_semaphore_create(1); + _objectClassInArrayLock = dispatch_semaphore_create(1); } return self; } @@ -69,7 +74,19 @@ - (id)valueForObject:(id)object { if (self.type.KVCDisabled) return [NSNull null]; - return [object valueForKey:self.name]; + + id value = [object valueForKey:self.name]; + + // 32位BOOL类型转换json后成Int类型 + /** https://github.com/CoderMJLee/MJExtension/issues/545 */ + // 32 bit device OR 32 bit Simulator +#if defined(__arm__) || (TARGET_OS_SIMULATOR && !__LP64__) + if (self.type.isBoolType) { + value = @([(NSNumber *)value boolValue]); + } +#endif + + return value; } /** @@ -150,21 +167,45 @@ - (void)setPorpertyKeys:(NSArray *)propertyKeys forClass:(Class)c { if (propertyKeys.count == 0) return; - self.propertyKeysDict[NSStringFromClass(c)] = propertyKeys; + NSString *key = NSStringFromClass(c); + if (!key) return; + + MJ_LOCK(self.propertyKeysLock); + self.propertyKeysDict[key] = propertyKeys; + MJ_UNLOCK(self.propertyKeysLock); } + - (NSArray *)propertyKeysForClass:(Class)c { - return self.propertyKeysDict[NSStringFromClass(c)]; + NSString *key = NSStringFromClass(c); + if (!key) return nil; + + MJ_LOCK(self.propertyKeysLock); + NSArray *propertyKeys = self.propertyKeysDict[key]; + MJ_UNLOCK(self.propertyKeysLock); + return propertyKeys; } /** 模型数组中的模型类型 */ - (void)setObjectClassInArray:(Class)objectClass forClass:(Class)c { if (!objectClass) return; - self.objectClassInArrayDict[NSStringFromClass(c)] = objectClass; + NSString *key = NSStringFromClass(c); + if (!key) return; + + MJ_LOCK(self.objectClassInArrayLock); + self.objectClassInArrayDict[key] = objectClass; + MJ_UNLOCK(self.objectClassInArrayLock); } + - (Class)objectClassInArrayForClass:(Class)c { - return self.objectClassInArrayDict[NSStringFromClass(c)]; + NSString *key = NSStringFromClass(c); + if (!key) return nil; + + MJ_LOCK(self.objectClassInArrayLock); + Class objectClass = self.objectClassInArrayDict[key]; + MJ_UNLOCK(self.objectClassInArrayLock); + return objectClass; } @end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyKey.h b/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyKey.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyKey.m b/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyKey.m old mode 100644 new mode 100755 diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyType.m b/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyType.m index 384beba..77d6b30 100755 --- a/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyType.m +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyType.m @@ -13,24 +13,23 @@ @implementation MJPropertyType -static NSMutableDictionary *types_; -+ (void)initialize -{ - types_ = [NSMutableDictionary dictionary]; -} - + (instancetype)cachedTypeWithCode:(NSString *)code { MJExtensionAssertParamNotNil2(code, nil); - @synchronized (self) { - MJPropertyType *type = types_[code]; - if (type == nil) { - type = [[self alloc] init]; - type.code = code; - types_[code] = type; - } - return type; + + static NSMutableDictionary *types; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + types = [NSMutableDictionary dictionary]; + }); + + MJPropertyType *type = types[code]; + if (type == nil) { + type = [[self alloc] init]; + type.code = code; + types[code] = type; } + return type; } #pragma mark - 公共方法 diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJClass.h b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJClass.h old mode 100644 new mode 100755 index e4ac1c5..260c8fc --- a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJClass.h +++ b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJClass.h @@ -14,14 +14,14 @@ typedef void (^MJClassesEnumeration)(Class c, BOOL *stop); /** 这个数组中的属性名才会进行字典和模型的转换 */ -typedef NSArray * (^MJAllowedPropertyNames)(); +typedef NSArray * (^MJAllowedPropertyNames)(void); /** 这个数组中的属性名才会进行归档 */ -typedef NSArray * (^MJAllowedCodingPropertyNames)(); +typedef NSArray * (^MJAllowedCodingPropertyNames)(void); /** 这个数组中的属性名将会被忽略:不进行字典和模型的转换 */ -typedef NSArray * (^MJIgnoredPropertyNames)(); +typedef NSArray * (^MJIgnoredPropertyNames)(void); /** 这个数组中的属性名将会被忽略:不进行归档 */ -typedef NSArray * (^MJIgnoredCodingPropertyNames)(); +typedef NSArray * (^MJIgnoredCodingPropertyNames)(void); /** * 类相关的扩展 @@ -86,5 +86,5 @@ typedef NSArray * (^MJIgnoredCodingPropertyNames)(); + (NSMutableArray *)mj_totalIgnoredCodingPropertyNames; #pragma mark - 内部使用 -+ (void)mj_setupBlockReturnValue:(id (^)())block key:(const char *)key; ++ (void)mj_setupBlockReturnValue:(id (^)(void))block key:(const char *)key; @end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJClass.m b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJClass.m old mode 100644 new mode 100755 index 46447a8..cd987cf --- a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJClass.m +++ b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJClass.m @@ -17,30 +17,28 @@ static const char MJIgnoredPropertyNamesKey = '\0'; static const char MJAllowedCodingPropertyNamesKey = '\0'; static const char MJIgnoredCodingPropertyNamesKey = '\0'; -static NSMutableDictionary *allowedPropertyNamesDict_; -static NSMutableDictionary *ignoredPropertyNamesDict_; -static NSMutableDictionary *allowedCodingPropertyNamesDict_; -static NSMutableDictionary *ignoredCodingPropertyNamesDict_; - @implementation NSObject (MJClass) -+ (void)load ++ (NSMutableDictionary *)mj_classDictForKey:(const void *)key { - allowedPropertyNamesDict_ = [NSMutableDictionary dictionary]; - ignoredPropertyNamesDict_ = [NSMutableDictionary dictionary]; - allowedCodingPropertyNamesDict_ = [NSMutableDictionary dictionary]; - ignoredCodingPropertyNamesDict_ = [NSMutableDictionary dictionary]; -} - -+ (NSMutableDictionary *)dictForKey:(const void *)key -{ - @synchronized (self) { - if (key == &MJAllowedPropertyNamesKey) return allowedPropertyNamesDict_; - if (key == &MJIgnoredPropertyNamesKey) return ignoredPropertyNamesDict_; - if (key == &MJAllowedCodingPropertyNamesKey) return allowedCodingPropertyNamesDict_; - if (key == &MJIgnoredCodingPropertyNamesKey) return ignoredCodingPropertyNamesDict_; - return nil; - } + static NSMutableDictionary *allowedPropertyNamesDict; + static NSMutableDictionary *ignoredPropertyNamesDict; + static NSMutableDictionary *allowedCodingPropertyNamesDict; + static NSMutableDictionary *ignoredCodingPropertyNamesDict; + + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + allowedPropertyNamesDict = [NSMutableDictionary dictionary]; + ignoredPropertyNamesDict = [NSMutableDictionary dictionary]; + allowedCodingPropertyNamesDict = [NSMutableDictionary dictionary]; + ignoredCodingPropertyNamesDict = [NSMutableDictionary dictionary]; + }); + + if (key == &MJAllowedPropertyNamesKey) return allowedPropertyNamesDict; + if (key == &MJIgnoredPropertyNamesKey) return ignoredPropertyNamesDict; + if (key == &MJAllowedCodingPropertyNamesKey) return allowedCodingPropertyNamesDict; + if (key == &MJIgnoredCodingPropertyNamesKey) return ignoredCodingPropertyNamesDict; + return nil; } + (void)mj_enumerateClasses:(MJClassesEnumeration)enumeration @@ -130,8 +128,9 @@ static NSMutableDictionary *ignoredCodingPropertyNamesDict_; { return [self mj_totalObjectsWithSelector:@selector(mj_allowedCodingPropertyNames) key:&MJAllowedCodingPropertyNamesKey]; } + #pragma mark - block和方法处理:存储block的返回值 -+ (void)mj_setupBlockReturnValue:(id (^)())block key:(const char *)key ++ (void)mj_setupBlockReturnValue:(id (^)(void))block key:(const char *)key { if (block) { objc_setAssociatedObject(self, key, block(), OBJC_ASSOCIATION_RETAIN_NONATOMIC); @@ -140,31 +139,37 @@ static NSMutableDictionary *ignoredCodingPropertyNamesDict_; } // 清空数据 - [[self dictForKey:key] removeAllObjects]; + MJExtensionSemaphoreCreate + MJExtensionSemaphoreWait + [[self mj_classDictForKey:key] removeAllObjects]; + MJExtensionSemaphoreSignal } + (NSMutableArray *)mj_totalObjectsWithSelector:(SEL)selector key:(const char *)key { - NSMutableArray *array = [self dictForKey:key][NSStringFromClass(self)]; - if (array) return array; - - // 创建、存储 - [self dictForKey:key][NSStringFromClass(self)] = array = [NSMutableArray array]; - - if ([self respondsToSelector:selector]) { + MJExtensionSemaphoreCreate + MJExtensionSemaphoreWait + NSMutableArray *array = [self mj_classDictForKey:key][NSStringFromClass(self)]; + if (array == nil) { + // 创建、存储 + [self mj_classDictForKey:key][NSStringFromClass(self)] = array = [NSMutableArray array]; + + if ([self respondsToSelector:selector]) { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" - NSArray *subArray = [self performSelector:selector]; + NSArray *subArray = [self performSelector:selector]; #pragma clang diagnostic pop - if (subArray) { - [array addObjectsFromArray:subArray]; + if (subArray) { + [array addObjectsFromArray:subArray]; + } } + + [self mj_enumerateAllClasses:^(__unsafe_unretained Class c, BOOL *stop) { + NSArray *subArray = objc_getAssociatedObject(c, key); + [array addObjectsFromArray:subArray]; + }]; } - - [self mj_enumerateAllClasses:^(__unsafe_unretained Class c, BOOL *stop) { - NSArray *subArray = objc_getAssociatedObject(c, key); - [array addObjectsFromArray:subArray]; - }]; + MJExtensionSemaphoreSignal return array; } @end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJKeyValue.h b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJKeyValue.h index 2428a4a..1706c58 100755 --- a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJKeyValue.h +++ b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJKeyValue.h @@ -47,6 +47,10 @@ */ + (NSDictionary *)mj_objectClassInArray; + +/** 特殊地区在字符串格式化数字时使用 */ ++ (NSLocale *)mj_numberLocale; + /** * 旧值换新值,用于过滤字典中的值 * @@ -59,12 +63,16 @@ /** * 当字典转模型完毕时调用 */ -- (void)mj_keyValuesDidFinishConvertingToObject; +- (void)mj_keyValuesDidFinishConvertingToObject MJExtensionDeprecated("请使用`mj_didConvertToObjectWithKeyValues:`替代"); +- (void)mj_keyValuesDidFinishConvertingToObject:(NSDictionary *)keyValues MJExtensionDeprecated("请使用`mj_didConvertToObjectWithKeyValues:`替代"); +- (void)mj_didConvertToObjectWithKeyValues:(NSDictionary *)keyValues; /** * 当模型转字典完毕时调用 */ -- (void)mj_objectDidFinishConvertingToKeyValues; +- (void)mj_objectDidFinishConvertingToKeyValues MJExtensionDeprecated("请使用`mj_objectDidConvertToKeyValues:`替代"); +- (void)mj_objectDidConvertToKeyValues:(NSDictionary *)keyValues; + @end @interface NSObject (MJKeyValue) @@ -184,42 +192,3 @@ */ - (NSString *)mj_JSONString; @end - -@interface NSObject (MJKeyValueDeprecated_v_2_5_16) -- (instancetype)setKeyValues:(id)keyValue MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -- (instancetype)setKeyValues:(id)keyValues error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -- (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -- (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (void)referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -- (NSMutableDictionary *)keyValues MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -- (NSMutableDictionary *)keyValuesWithError:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -- (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -- (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -- (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -- (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (instancetype)objectWithKeyValues:(id)keyValues MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (instancetype)objectWithKeyValues:(id)keyValues error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (instancetype)objectWithFilename:(NSString *)filename MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (instancetype)objectWithFilename:(NSString *)filename error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (instancetype)objectWithFile:(NSString *)file MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (instancetype)objectWithFile:(NSString *)file error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (NSMutableArray *)objectArrayWithFilename:(NSString *)filename MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (NSMutableArray *)objectArrayWithFilename:(NSString *)filename error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (NSMutableArray *)objectArrayWithFile:(NSString *)file MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (NSMutableArray *)objectArrayWithFile:(NSString *)file error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -- (NSData *)JSONData MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -- (id)JSONObject MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -- (NSString *)JSONString MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -@end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJKeyValue.m b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJKeyValue.m index 84fe982..2ede082 100755 --- a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJKeyValue.m +++ b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJKeyValue.m @@ -16,6 +16,26 @@ #import "NSString+MJExtension.h" #import "NSObject+MJClass.h" +@implementation NSDecimalNumber(MJKeyValue) + +- (id)standardValueWithTypeCode:(NSString *)typeCode { + // 由于这里涉及到编译器问题, 暂时保留 Long, 实际上在 64 位系统上, 这 2 个精度范围相同, + // 32 位略有不同, 其余都可使用 Double 进行强转不丢失精度 + if ([typeCode isEqualToString:MJPropertyTypeLongLong]) { + return @(self.longLongValue); + } else if ([typeCode isEqualToString:MJPropertyTypeLongLong.uppercaseString]) { + return @(self.unsignedLongLongValue); + } else if ([typeCode isEqualToString:MJPropertyTypeLong]) { + return @(self.longValue); + } else if ([typeCode isEqualToString:MJPropertyTypeLong.uppercaseString]) { + return @(self.unsignedLongValue); + } else { + return @(self.doubleValue); + } +} + +@end + @implementation NSObject (MJKeyValue) #pragma mark - 错误 @@ -53,11 +73,8 @@ static const char MJReferenceReplacedKeyWhenCreatingKeyValuesKey = '\0'; } #pragma mark - --常用的对象-- -static NSNumberFormatter *numberFormatter_; + (void)load { - numberFormatter_ = [[NSNumberFormatter alloc] init]; - // 默认设置 [self mj_referenceReplacedKeyWhenCreatingKeyValues:YES]; } @@ -83,6 +100,11 @@ static NSNumberFormatter *numberFormatter_; NSArray *allowedPropertyNames = [clazz mj_totalAllowedPropertyNames]; NSArray *ignoredPropertyNames = [clazz mj_totalIgnoredPropertyNames]; + NSLocale *numberLocale = nil; + if ([self.class respondsToSelector:@selector(mj_numberLocale)]) { + numberLocale = self.class.mj_numberLocale; + } + //通过封装的方法回调一个通过运行时编写的,用于返回属性列表的方法。 [clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) { @try { @@ -141,50 +163,59 @@ static NSNumberFormatter *numberFormatter_; } else { // 字典数组-->模型数组 value = [objectClass mj_objectArrayWithKeyValuesArray:value context:context]; } - } else { - if (propertyClass == [NSString class]) { - if ([value isKindOfClass:[NSNumber class]]) { - // NSNumber -> NSString - value = [value description]; - } else if ([value isKindOfClass:[NSURL class]]) { - // NSURL -> NSString - value = [value absoluteString]; + } else if (propertyClass == [NSString class]) { + if ([value isKindOfClass:[NSNumber class]]) { + // NSNumber -> NSString + value = [value description]; + } else if ([value isKindOfClass:[NSURL class]]) { + // NSURL -> NSString + value = [value absoluteString]; + } + } else if ([value isKindOfClass:[NSString class]]) { + if (propertyClass == [NSURL class]) { + // NSString -> NSURL + // 字符串转码 + value = [value mj_url]; + } else if (type.isNumberType) { + NSString *oldValue = value; + + // NSString -> NSDecimalNumber, 使用 DecimalNumber 来转换数字, 避免丢失精度以及溢出 + NSDecimalNumber *decimalValue = [NSDecimalNumber decimalNumberWithString:oldValue + locale:numberLocale]; + + // 检查特殊情况 + if (decimalValue == NSDecimalNumber.notANumber) { + value = @(0); + }else if (propertyClass != [NSDecimalNumber class]) { + value = [decimalValue standardValueWithTypeCode:type.code]; + } else { + value = decimalValue; } - } else if ([value isKindOfClass:[NSString class]]) { - if (propertyClass == [NSURL class]) { - // NSString -> NSURL - // 字符串转码 - value = [value mj_url]; - } else if (type.isNumberType) { - NSString *oldValue = value; - - // NSString -> NSNumber - if (type.typeClass == [NSDecimalNumber class]) { - value = [NSDecimalNumber decimalNumberWithString:oldValue]; - } else { - value = [numberFormatter_ numberFromString:oldValue]; - } - - // 如果是BOOL - if (type.isBoolType) { - // 字符串转BOOL(字符串没有charValue方法) - // 系统会调用字符串的charValue转为BOOL类型 - NSString *lower = [oldValue lowercaseString]; - if ([lower isEqualToString:@"yes"] || [lower isEqualToString:@"true"]) { - value = @YES; - } else if ([lower isEqualToString:@"no"] || [lower isEqualToString:@"false"]) { - value = @NO; - } + + // 如果是BOOL + if (type.isBoolType) { + // 字符串转BOOL(字符串没有charValue方法) + // 系统会调用字符串的charValue转为BOOL类型 + NSString *lower = [oldValue lowercaseString]; + if ([lower isEqualToString:@"yes"] || [lower isEqualToString:@"true"]) { + value = @YES; + } else if ([lower isEqualToString:@"no"] || [lower isEqualToString:@"false"]) { + value = @NO; } } } - - // value和property类型不匹配 - if (propertyClass && ![value isKindOfClass:propertyClass]) { - value = nil; + } else if ([value isKindOfClass:[NSNumber class]] && propertyClass == [NSDecimalNumber class]){ + // 过滤 NSDecimalNumber类型 + if (![value isKindOfClass:[NSDecimalNumber class]]) { + value = [NSDecimalNumber decimalNumberWithDecimal:[((NSNumber *)value) decimalValue]]; } } + // 经过转换后, 最终检查 value 与 property 是否匹配 + if (propertyClass && ![value isKindOfClass:propertyClass]) { + value = nil; + } + // 3.赋值 [property setValue:value forObject:self]; } @catch (NSException *exception) { @@ -194,9 +225,18 @@ static NSNumberFormatter *numberFormatter_; }]; // 转换完毕 + if ([self respondsToSelector:@selector(mj_didConvertToObjectWithKeyValues:)]) { + [self mj_didConvertToObjectWithKeyValues:keyValues]; + } +#pragma clang diagnostic push +#pragma clang diagnostic ignored"-Wdeprecated-declarations" if ([self respondsToSelector:@selector(mj_keyValuesDidFinishConvertingToObject)]) { [self mj_keyValuesDidFinishConvertingToObject]; } + if ([self respondsToSelector:@selector(mj_keyValuesDidFinishConvertingToObject:)]) { + [self mj_keyValuesDidFinishConvertingToObject:keyValues]; + } +#pragma clang diagnostic pop return self; } @@ -299,6 +339,11 @@ static NSNumberFormatter *numberFormatter_; - (NSMutableDictionary *)mj_keyValuesWithKeys:(NSArray *)keys ignoredKeys:(NSArray *)ignoredKeys { // 如果自己不是模型类, 那就返回自己 + // 模型类过滤掉 NSNull + // 唯一一个不返回自己的 + if ([self isMemberOfClass:NSNull.class]) { return nil; } + // 这里虽然返回了自己, 但是其实是有报错信息的. + // TODO: 报错机制不好, 需要重做 MJExtensionAssertError(![MJFoundation isClassFromFoundation:[self class]], (NSMutableDictionary *)self, [self class], @"不是自定义的模型类") id keyValues = [NSMutableDictionary dictionary]; @@ -387,9 +432,15 @@ static NSNumberFormatter *numberFormatter_; }]; // 转换完毕 + if ([self respondsToSelector:@selector(mj_objectDidConvertToKeyValues:)]) { + [self mj_objectDidConvertToKeyValues:keyValues]; + } +#pragma clang diagnostic push +#pragma clang diagnostic ignored"-Wdeprecated-declarations" if ([self respondsToSelector:@selector(mj_objectDidFinishConvertingToKeyValues)]) { [self mj_objectDidFinishConvertingToKeyValues]; } +#pragma clang diagnostic pop return keyValues; } @@ -418,9 +469,13 @@ static NSNumberFormatter *numberFormatter_; NSMutableArray *keyValuesArray = [NSMutableArray array]; for (id object in objectArray) { if (keys) { - [keyValuesArray addObject:[object mj_keyValuesWithKeys:keys]]; + id convertedObj = [object mj_keyValuesWithKeys:keys]; + if (!convertedObj) { continue; } + [keyValuesArray addObject:convertedObj]; } else { - [keyValuesArray addObject:[object mj_keyValuesWithIgnoredKeys:ignoredKeys]]; + id convertedObj = [object mj_keyValuesWithIgnoredKeys:ignoredKeys]; + if (!convertedObj) { continue; } + [keyValuesArray addObject:convertedObj]; } } return keyValuesArray; @@ -459,251 +514,5 @@ static NSNumberFormatter *numberFormatter_; return [[NSString alloc] initWithData:[self mj_JSONData] encoding:NSUTF8StringEncoding]; } + @end - -@implementation NSObject (MJKeyValueDeprecated_v_2_5_16) -- (instancetype)setKeyValues:(id)keyValues -{ - return [self mj_setKeyValues:keyValues]; -} - -- (instancetype)setKeyValues:(id)keyValues error:(NSError **)error -{ - id value = [self mj_setKeyValues:keyValues]; - if (error != NULL) { - *error = [self.class mj_error]; - } - return value; - -} - -- (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context -{ - return [self mj_setKeyValues:keyValues context:context]; -} - -- (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error -{ - id value = [self mj_setKeyValues:keyValues context:context]; - if (error != NULL) { - *error = [self.class mj_error]; - } - return value; -} - -+ (void)referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference -{ - [self mj_referenceReplacedKeyWhenCreatingKeyValues:reference]; -} - -- (NSMutableDictionary *)keyValues -{ - return [self mj_keyValues]; -} - -- (NSMutableDictionary *)keyValuesWithError:(NSError **)error -{ - id value = [self mj_keyValues]; - if (error != NULL) { - *error = [self.class mj_error]; - } - return value; -} - -- (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys -{ - return [self mj_keyValuesWithKeys:keys]; -} - -- (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys error:(NSError **)error -{ - id value = [self mj_keyValuesWithKeys:keys]; - if (error != NULL) { - *error = [self.class mj_error]; - } - return value; -} - -- (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys -{ - return [self mj_keyValuesWithIgnoredKeys:ignoredKeys]; -} - -- (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys error:(NSError **)error -{ - id value = [self mj_keyValuesWithIgnoredKeys:ignoredKeys]; - if (error != NULL) { - *error = [self.class mj_error]; - } - return value; -} - -+ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray -{ - return [self mj_keyValuesArrayWithObjectArray:objectArray]; -} - -+ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray error:(NSError **)error -{ - id value = [self mj_keyValuesArrayWithObjectArray:objectArray]; - if (error != NULL) { - *error = [self mj_error]; - } - return value; -} - -+ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys -{ - return [self mj_keyValuesArrayWithObjectArray:objectArray keys:keys]; -} - -+ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys error:(NSError **)error -{ - id value = [self mj_keyValuesArrayWithObjectArray:objectArray keys:keys]; - if (error != NULL) { - *error = [self mj_error]; - } - return value; -} - -+ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys -{ - return [self mj_keyValuesArrayWithObjectArray:objectArray ignoredKeys:ignoredKeys]; -} - -+ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys error:(NSError **)error -{ - id value = [self mj_keyValuesArrayWithObjectArray:objectArray ignoredKeys:ignoredKeys]; - if (error != NULL) { - *error = [self mj_error]; - } - return value; -} - -+ (instancetype)objectWithKeyValues:(id)keyValues -{ - return [self mj_objectWithKeyValues:keyValues]; -} - -+ (instancetype)objectWithKeyValues:(id)keyValues error:(NSError **)error -{ - id value = [self mj_objectWithKeyValues:keyValues]; - if (error != NULL) { - *error = [self mj_error]; - } - return value; -} - -+ (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context -{ - return [self mj_objectWithKeyValues:keyValues context:context]; -} - -+ (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error -{ - id value = [self mj_objectWithKeyValues:keyValues context:context]; - if (error != NULL) { - *error = [self mj_error]; - } - return value; -} - -+ (instancetype)objectWithFilename:(NSString *)filename -{ - return [self mj_objectWithFilename:filename]; -} - -+ (instancetype)objectWithFilename:(NSString *)filename error:(NSError **)error -{ - id value = [self mj_objectWithFilename:filename]; - if (error != NULL) { - *error = [self mj_error]; - } - return value; -} - -+ (instancetype)objectWithFile:(NSString *)file -{ - return [self mj_objectWithFile:file]; -} - -+ (instancetype)objectWithFile:(NSString *)file error:(NSError **)error -{ - id value = [self mj_objectWithFile:file]; - if (error != NULL) { - *error = [self mj_error]; - } - return value; -} - -+ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray -{ - return [self mj_objectArrayWithKeyValuesArray:keyValuesArray]; -} - -+ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray error:(NSError **)error -{ - id value = [self mj_objectArrayWithKeyValuesArray:keyValuesArray]; - if (error != NULL) { - *error = [self mj_error]; - } - return value; -} - -+ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context -{ - return [self mj_objectArrayWithKeyValuesArray:keyValuesArray context:context]; -} - -+ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context error:(NSError **)error -{ - id value = [self mj_objectArrayWithKeyValuesArray:keyValuesArray context:context]; - if (error != NULL) { - *error = [self mj_error]; - } - return value; -} - -+ (NSMutableArray *)objectArrayWithFilename:(NSString *)filename -{ - return [self mj_objectArrayWithFilename:filename]; -} - -+ (NSMutableArray *)objectArrayWithFilename:(NSString *)filename error:(NSError **)error -{ - id value = [self mj_objectArrayWithFilename:filename]; - if (error != NULL) { - *error = [self mj_error]; - } - return value; -} - -+ (NSMutableArray *)objectArrayWithFile:(NSString *)file -{ - return [self mj_objectArrayWithFile:file]; -} - -+ (NSMutableArray *)objectArrayWithFile:(NSString *)file error:(NSError **)error -{ - id value = [self mj_objectArrayWithFile:file]; - if (error != NULL) { - *error = [self mj_error]; - } - return value; -} - -- (NSData *)JSONData -{ - return [self mj_JSONData]; -} - -- (id)JSONObject -{ - return [self mj_JSONObject]; -} - -- (NSString *)JSONString -{ - return [self mj_JSONString]; -} -@end \ No newline at end of file diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJProperty.h b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJProperty.h old mode 100644 new mode 100755 index e4e0ebb..1bf88e9 --- a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJProperty.h +++ b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJProperty.h @@ -20,10 +20,10 @@ typedef void (^MJPropertiesEnumeration)(MJProperty *property, BOOL *stop); /** 将属性名换为其他key去字典中取值 */ -typedef NSDictionary * (^MJReplacedKeyFromPropertyName)(); +typedef NSDictionary * (^MJReplacedKeyFromPropertyName)(void); typedef id (^MJReplacedKeyFromPropertyName121)(NSString *propertyName); /** 数组中需要转换的模型类 */ -typedef NSDictionary * (^MJObjectClassInArray)(); +typedef NSDictionary * (^MJObjectClassInArray)(void); /** 用于过滤字典中的值 */ typedef id (^MJNewValueFromOldValue)(id object, id oldValue, MJProperty *property); @@ -68,12 +68,3 @@ typedef id (^MJNewValueFromOldValue)(id object, id oldValue, MJProperty *propert */ + (void)mj_setupObjectClassInArray:(MJObjectClassInArray)objectClassInArray; @end - -@interface NSObject (MJPropertyDeprecated_v_2_5_16) -+ (void)enumerateProperties:(MJPropertiesEnumeration)enumeration MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (void)setupNewValueFromOldValue:(MJNewValueFromOldValue)newValueFormOldValue MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (id)getNewValueFromObject:(__unsafe_unretained id)object oldValue:(__unsafe_unretained id)oldValue property:(__unsafe_unretained MJProperty *)property MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (void)setupReplacedKeyFromPropertyName:(MJReplacedKeyFromPropertyName)replacedKeyFromPropertyName MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (void)setupReplacedKeyFromPropertyName121:(MJReplacedKeyFromPropertyName121)replacedKeyFromPropertyName121 MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -+ (void)setupObjectClassInArray:(MJObjectClassInArray)objectClassInArray MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); -@end \ No newline at end of file diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJProperty.m b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJProperty.m old mode 100644 new mode 100755 index c9aff54..c3a3c6a --- a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJProperty.m +++ b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJProperty.m @@ -27,35 +27,33 @@ static const char MJCachedPropertiesKey = '\0'; @implementation NSObject (Property) -static NSMutableDictionary *replacedKeyFromPropertyNameDict_; -static NSMutableDictionary *replacedKeyFromPropertyName121Dict_; -static NSMutableDictionary *newValueFromOldValueDict_; -static NSMutableDictionary *objectClassInArrayDict_; -static NSMutableDictionary *cachedPropertiesDict_; - -+ (void)load ++ (NSMutableDictionary *)mj_propertyDictForKey:(const void *)key { - replacedKeyFromPropertyNameDict_ = [NSMutableDictionary dictionary]; - replacedKeyFromPropertyName121Dict_ = [NSMutableDictionary dictionary]; - newValueFromOldValueDict_ = [NSMutableDictionary dictionary]; - objectClassInArrayDict_ = [NSMutableDictionary dictionary]; - cachedPropertiesDict_ = [NSMutableDictionary dictionary]; -} - -+ (NSMutableDictionary *)dictForKey:(const void *)key -{ - @synchronized (self) { - if (key == &MJReplacedKeyFromPropertyNameKey) return replacedKeyFromPropertyNameDict_; - if (key == &MJReplacedKeyFromPropertyName121Key) return replacedKeyFromPropertyName121Dict_; - if (key == &MJNewValueFromOldValueKey) return newValueFromOldValueDict_; - if (key == &MJObjectClassInArrayKey) return objectClassInArrayDict_; - if (key == &MJCachedPropertiesKey) return cachedPropertiesDict_; - return nil; - } + static NSMutableDictionary *replacedKeyFromPropertyNameDict; + static NSMutableDictionary *replacedKeyFromPropertyName121Dict; + static NSMutableDictionary *newValueFromOldValueDict; + static NSMutableDictionary *objectClassInArrayDict; + static NSMutableDictionary *cachedPropertiesDict; + + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + replacedKeyFromPropertyNameDict = [NSMutableDictionary dictionary]; + replacedKeyFromPropertyName121Dict = [NSMutableDictionary dictionary]; + newValueFromOldValueDict = [NSMutableDictionary dictionary]; + objectClassInArrayDict = [NSMutableDictionary dictionary]; + cachedPropertiesDict = [NSMutableDictionary dictionary]; + }); + + if (key == &MJReplacedKeyFromPropertyNameKey) return replacedKeyFromPropertyNameDict; + if (key == &MJReplacedKeyFromPropertyName121Key) return replacedKeyFromPropertyName121Dict; + if (key == &MJNewValueFromOldValueKey) return newValueFromOldValueDict; + if (key == &MJObjectClassInArrayKey) return objectClassInArrayDict; + if (key == &MJCachedPropertiesKey) return cachedPropertiesDict; + return nil; } #pragma mark - --私有方法-- -+ (id)propertyKey:(NSString *)propertyName ++ (id)mj_propertyKey:(NSString *)propertyName { MJExtensionAssertParamNotNil2(propertyName, nil); @@ -64,10 +62,6 @@ static NSMutableDictionary *cachedPropertiesDict_; if ([self respondsToSelector:@selector(mj_replacedKeyFromPropertyName121:)]) { key = [self mj_replacedKeyFromPropertyName121:propertyName]; } - // 兼容旧版本 - if ([self respondsToSelector:@selector(replacedKeyFromPropertyName121:)]) { - key = [self performSelector:@selector(replacedKeyFromPropertyName121) withObject:propertyName]; - } // 调用block if (!key) { @@ -84,10 +78,6 @@ static NSMutableDictionary *cachedPropertiesDict_; if ((!key || [key isEqual:propertyName]) && [self respondsToSelector:@selector(mj_replacedKeyFromPropertyName)]) { key = [self mj_replacedKeyFromPropertyName][propertyName]; } - // 兼容旧版本 - if ((!key || [key isEqual:propertyName]) && [self respondsToSelector:@selector(replacedKeyFromPropertyName)]) { - key = [self performSelector:@selector(replacedKeyFromPropertyName)][propertyName]; - } if (!key || [key isEqual:propertyName]) { [self mj_enumerateAllClasses:^(__unsafe_unretained Class c, BOOL *stop) { @@ -105,16 +95,12 @@ static NSMutableDictionary *cachedPropertiesDict_; return key; } -+ (Class)propertyObjectClassInArray:(NSString *)propertyName ++ (Class)mj_propertyObjectClassInArray:(NSString *)propertyName { __block id clazz = nil; if ([self respondsToSelector:@selector(mj_objectClassInArray)]) { clazz = [self mj_objectClassInArray][propertyName]; } - // 兼容旧版本 - if ([self respondsToSelector:@selector(objectClassInArray)]) { - clazz = [self performSelector:@selector(objectClassInArray)][propertyName]; - } if (!clazz) { [self mj_enumerateAllClasses:^(__unsafe_unretained Class c, BOOL *stop) { @@ -137,8 +123,10 @@ static NSMutableDictionary *cachedPropertiesDict_; + (void)mj_enumerateProperties:(MJPropertiesEnumeration)enumeration { // 获得成员变量 - NSArray *cachedProperties = [self properties]; - + MJExtensionSemaphoreCreate + MJExtensionSemaphoreWait + NSArray *cachedProperties = [self mj_properties]; + MJExtensionSemaphoreSignal // 遍历成员变量 BOOL stop = NO; for (MJProperty *property in cachedProperties) { @@ -148,34 +136,39 @@ static NSMutableDictionary *cachedPropertiesDict_; } #pragma mark - 公共方法 -+ (NSMutableArray *)properties ++ (NSMutableArray *)mj_properties { - NSMutableArray *cachedProperties = [self dictForKey:&MJCachedPropertiesKey][NSStringFromClass(self)]; - + NSMutableArray *cachedProperties = [self mj_propertyDictForKey:&MJCachedPropertiesKey][NSStringFromClass(self)]; if (cachedProperties == nil) { - cachedProperties = [NSMutableArray array]; - - [self mj_enumerateClasses:^(__unsafe_unretained Class c, BOOL *stop) { - // 1.获得所有的成员变量 - unsigned int outCount = 0; - objc_property_t *properties = class_copyPropertyList(c, &outCount); + + if (cachedProperties == nil) { + cachedProperties = [NSMutableArray array]; - // 2.遍历每一个成员变量 - for (unsigned int i = 0; i