如果您对是否有等效于iOSObjectiveC的内部异常?感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解是否有等效于iOSObjectiveC的内部异常?的各种细节,此外还有关于iOS18发布
如果您对是否有等效于 iOS Objective C 的内部异常?感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解是否有等效于 iOS Objective C 的内部异常?的各种细节,此外还有关于iOS 18发布啦!iOS 18好吗?iOS 18值得更新吗?iOS 18beta版、iOS 开发 iOS 应用开发 iOS 软件定制 iOS 电子点餐、iOS:开源 VoIP/SIP Objective-C 代码 [关闭] - iOS: Open Source VoIP/SIP Objective-C Code [closed]、objective-c – iOS,Objective c在一开始就抛出异常的实用技巧。
本文目录一览:- 是否有等效于 iOS Objective C 的内部异常?
- iOS 18发布啦!iOS 18好吗?iOS 18值得更新吗?iOS 18beta版
- iOS 开发 iOS 应用开发 iOS 软件定制 iOS 电子点餐
- iOS:开源 VoIP/SIP Objective-C 代码 [关闭] - iOS: Open Source VoIP/SIP Objective-C Code [closed]
- objective-c – iOS,Objective c在一开始就抛出异常
是否有等效于 iOS Objective C 的内部异常?
如何解决是否有等效于 iOS Objective C 的内部异常?
我想将一些非致命错误从我的 iOS 应用记录到 Firebase Crashlytics。我从我们使用的各种 SDK 中获取 NSError 对象;然而,它们本身并不是非常有用。我需要向他们添加一条消息,以便我可以知道他们在我们的代码中被调用的位置以及在错误条件发生之前发生了什么。对于我们的 Java Android 应用程序,我可以创建一个带有内部异常的新异常,如下所示:
new Exception("My message",originalException);
iOS Objective C 中是否有等价物?
其他可能解决我的问题的事情:
- 我在 Crashlytics 上只看到一个
recordError
方法,它只接受一个参数“error”。是否有我不知道的隐藏方法? - 我可以创建一个新的 NSError 对象并克隆所有内容,在我的新消息之前。这样做合理吗?我需要复制原始 NSError 对象的所有属性以确保捕获有关原始错误的所有重要信息?
- 我可以在调用
log
之前调用 CrashlyticslogWithFormat
或recordError
,然后我想知道的任何历史记录都会显示在 Crashlytics 的“日志”选项卡上。我对此并不感到疯狂,因为似乎代码中的多个点可能会发生相同的错误,而且我不一定希望 Firebase 将它们混为一谈。 Firebase 是否足够聪明,不会将它们混为一谈?或者,这是否只是''事情完成的方式'',我需要克服它并以这种方式添加我的遥测数据而无需抱怨?
谢谢。
解决方法
我建议您从 Crashlytics 方面解决这个问题。您需要首先确定您希望如何跟踪您的信息、您正在跟踪哪些信息以及您将如何跟踪这些信息。当您有诸如“Firebase 可以将它们合并在一起吗?”之类的答案时您应该深入研究代码并选择合适的解决方案。此外,使用 Crashlytics 以外的其他工具也可能是一个解决方案(不是说您应该这样做,只是可以)。
我个人会继承 NSError
对象并包装原始对象。您可以添加其他属性,以便稍后帮助您跟踪信息。从技术上讲,您的类可以包装您的类的另一个实例,该实例包装 NSError
,因此您可以拥有 error->originalError->originalError
,这是一件好事。另一个可能发生的潜在不便事情是您在不同的模块中两次或多次发送错误(原始 + 包装)。您还可以通过一些只创建一次的唯一标识符来跟踪它。
尝试深入研究一些代码...
@interface AppError: NSError
@property (nonatomic,strong) NSError *originalError;
@property (nonatomic,strong) NSString *message;
@property (nonatomic,strong) NSString *identifier;
@end
@implementation AppError
- (id)initWithMessage:(NSString *)message andOriginalError:(NSError *)error {
if((self = [super initWithDomain:@"AppError" code:100 userInfo:nil])) {
self.originalError = error;
self.message = message;
if([error isKindOfClass:[AppError class]]) {
self.identifier = [(AppError *)error identifier];
} else {
self.identifier = [[NSUUID new] UUIDString];
}
}
return self;
}
+ (NSError *)flatMapErrors:(NSError *)error {
if(![error isKindOfClass:[AppError class]]) {
return error; // Is a normal error so just return it
}
NSString *identifier = nil;
NSMutableArray<NSString *> *messages = [[NSMutableArray<NSString *> alloc] init];
NSError *originalError = nil;
for(AppError *currentError = error; [currentError isKindOfClass:[AppError class]]; currentError = currentError.originalError) {
identifier = currentError.identifier;
originalError = currentError.originalError;
[messages addObject:currentError.message];
}
NSString *message = nil;
for(NSString *errorMessage in messages.reverseObjectEnumerator) {
if(message == nil) {
message = errorMessage;
} else {
message = [NSString stringWithFormat:@"%@ (%@)",errorMessage,message];
}
}
return [NSError errorWithDomain:@"AppError.flatMapErrors" code:originalError.code userInfo:@{@"message": message,@"original_error": originalError,@"error_id": identifier}];
}
@end
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Case 1
AppError *err = [[AppError alloc] initWithMessage:@"Test" andOriginalError:[NSError errorWithDomain:@"testCase1" code:500 userInfo:@{@"dev_message": @"something bad happened"}]];
NSLog(@"%@",[AppError flatMapErrors:err]);
// Case 2
NSLog(@"%@",[AppError flatMapErrors:[self scenarioA]]);
}
- (NSError *)scenarioA {
return [[AppError alloc] initWithMessage:@"Scenario A occurred" andOriginalError:[self scenarioB]];
}
- (NSError *)scenarioB {
return [[AppError alloc] initWithMessage:@"Scenario B occurred" andOriginalError:[self scenarioC]];
}
- (NSError *)scenarioC {
return [[AppError alloc] initWithMessage:@"Scenario C occurred" andOriginalError:[NSError errorWithDomain:@"testCase2" code:500 userInfo:@{@"dev_message": @"something bad happened"}]];
}
@end
(抱歉对 ObjectiveC 有点生疏)
您可以以任何您认为合适的方式更改您的错误类实现的接口。但大多数情况下,这种方法可以将您想要的任意数量的错误打包在一起,这在第二种情况下进行了演示。结果打印
Error Domain=AppError.flatMapErrors
Code=500 "(null)"
UserInfo = {
message = Scenario A occurred (Scenario B occurred (Scenario C occurred)),original_error=Error Domain=testCase2 Code=500 "(null)" UserInfo={dev_message=something bad happened},error_id=447149A0-F770-4F1F-90CA-0E7BF8967B1C
}
通过这种方式,您可以获得推送到任何服务(如 Crahlytics)所需的所有信息。从您的代码方面来看,您始终需要使用 flatMapErrors
,它能够同时解析 AppError
和 NSError
,这非常方便。所以你不需要在任何地方改变界面。请注意,方法 scenarioN
返回普通的 NSError
而不是 AppError
。
此外,添加唯一标识符将帮助您识别错误是否已多次发送。假设方法 scenarioB
和 scenarioC
都会向 Crashlytics 发送错误。错误看起来不同,但本质上是相同的错误。您将能够在 Crashlytics 中看到这一点,因为您会看到 2 个具有相同标识符的错误。
代码需要一些改进,但我相信它应该足以说明功能。希望它能让您更接近您的解决方案。
iOS 18发布啦!iOS 18好吗?iOS 18值得更新吗?iOS 18beta版
ios 18 横空出世,带来了一系列激动人心的新功能。您是否好奇 ios 18 的亮点,它是否值得升级?php小编西瓜带来 ios 18 的全面解读,详细介绍了它的新特性、改进和已解决的错误。如果您正在考虑升级到 ios 18,请继续阅读以了解它的优缺点,并决定它是否适合您的设备和需求。
iOS 18 beta版终于发布啦!iOS 18此次更新是否与预期一样呢? iOS 18更新了哪些内容呢?是否真的值得果粉用户升级呢?
iOS 18的更新内容涵盖了多个方面,旨在提升用户体验和个性化设置。以下是iOS 18的更新内容概览:
定制主屏幕:
用户可以自由
移动应用程序,按照个人喜好调整主屏幕布局。 图标支持深色模式,用户可以为图标着色,打造独特的外观。
应用程序可以随意放置,深色模式APP有更深度的适配,且有色系可选,整体可调节成一种色系。
优化控制中心:
控制中心进行了重新设计,新增了多款快捷组件,用户可以根据需要选择和
排列。 控件页面支持多页布局,用户可滑动访问控制中心的其它页面。
控制中心界面设计已扩展为多页布局,允许用户将不常访问的功能移动到次级页面。
隐私与安全:
iOS 18支持给APP上锁,支持面容识别,同时也能隐藏APP,以加强用户的隐私权限。
用户可以专门控制第三方App可以访问哪些通讯录,进一步保障数据安全。
信息应用更新:
发送的字体样式和表情有更多自定义选项。
支持稍后发送功能。
在无网情况下,iPhone 14及后续机型支持卫星直发。
其他内置应用更新:
邮箱应用进行了更新,分类和摘要功能提高了效率。
钱包应用支持两个手机一碰即可相互转账。
地图应用带来了新的地形图。
相册应用引入了智能功能,查找照片和照片分类更加精准。
附上iOS 18升级方法:
※1、刷机前请做好重要数据资料的备份,或勾选“保留用户资料刷机”,防止重要资料丢失;
※2、请确保移动设备未开启激活锁,或者知道 ID 锁帐号、密码,否则刷机后可能会无法激活设备;
※3、设备升级到 iOS 18后,将无法再降级到“苹果已关闭验证”的固件版本,即使之前使用备份了 SHSH 也不能降级。
打开最新版电脑端,用数据线把手机设备连接到电脑。点击上方“智能刷机”进入到“一键刷机”界面,连接成功会自动匹配iOS 18固件,选择“保留用户资料刷机”立即刷机。
以上就是iOS 18发布啦!iOS 18好吗?iOS 18值得更新吗?iOS 18beta版的详细内容,更多请关注php中文网其它相关文章!
iOS 开发 iOS 应用开发 iOS 软件定制 iOS 电子点餐
如何开发 ios 应用程序开发 iOS 应用程序既有趣又回报丰厚,如果您是一位新手,自然想知道从哪里入手。本路
线图提供了 iOS 应用程序开发的绝佳起点。在 Mac 电脑上,您可以创建在 iPad、iPhone
和 iPod touch 上运行的 iOS 应用程序。遵循本路线图以了解如何取得开发工具,理解主要
概念及最佳实践,并学会查找更多信息。
继续遵循此路线图,您将使用到 Xcode 和 iOS SDK(Apple 提供的开发工具)。您将了解
Objective-C(驱动所有 iOS 应用程序和框架的程序设计语言)的编程基础知识,并将探索
Cocoa Touch 框架。您将创建一个简单的 iOS 应用程序,并学会在设备上进行测试。最后
,您还会学到如何将应用程序提交到 App Store。
上海诸君信息科技有限公司致力于一流的创新软件产品设计定制,服务客户遍及全球,公司有多款精心设计的软件产品,如诸君工作系统、餐饮一体化管理系统、PadOrder 电子菜谱、CDM 文档管理系统、清洁能源参数优化系统、银行 iPad 文件管理系统等。
我们提供优秀的综合软件与游戏开发与咨询、管理软件定制开发、点单软件与移动客户端 (WP,Android,iOS) 软件开发,为全球多家软件公司、国企、医疗、能源机构提供优秀的应用解决方案,欢迎咨询!
我们为海内外客户提供先进的软件解决方案,因况制宜、使用最适合的前沿技术为客户解决问题,拥有强大的团队、熟悉前沿的开发技术。
我司拥有领先的诸君支持系统,使用前所未有的方式高效提供解决方案、敏捷处理客户反馈。
官网:http://uniguyit.com
手机:13611968046(杨经理)
QQ:2208934488
电邮:Service@uniguyit.com
iOS:开源 VoIP/SIP Objective-C 代码 [关闭] - iOS: Open Source VoIP/SIP Objective-C Code [closed]
问题:
Want to improve this question?想改善这个问题吗? Update the question so it''s on-topic for Stack Overflow.更新问题,使其成为 Stack Overflow的主题。
Closed 6 years ago . 6年前关闭。
I have been tasked with investigating the feasibility of writing an iPhone App to access our internal VoIP/SIP systems.我的任务是调查编写 iPhone 应用程序以访问我们内部 VoIP/SIP 系统的可行性。
I''ve never coded anything close to VoIP before.我以前从未编写过任何接近 VoIP 的代码。 Are there any open source VoIP/SIP libraries or examples in C or Objective-C?是否有 C 或 Objective-C 中的任何开源 VoIP/SIP 库或示例?
An iOS App that I can skin and add our required features to (mainly UI related) would be the holy grail here.一个我可以设置皮肤并向其中添加我们所需功能(主要是 UI 相关的)的 iOS 应用程序将是这里的圣杯。
解决方案:
参考: https://stackoom.com/en/question/6GPSobjective-c – iOS,Objective c在一开始就抛出异常
这是代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Override point for customization after application launch. self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease]; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; \\ throw exception on this line return YES; }
例外情况如下:
Thread 1: Program received signal: "SIGABRT"
当main.m上显示实际异常时(我没有创建它也看不到它):
int main(int argc,char *argv[]) { @autoreleasepool { return UIApplicationMain(argc,argv,nil,NsstringFromClass([AppDelegate class])); } }
谢谢!
解决方法
您可能还想为项目添加一个Exception(Xcode 4.2):
>打开断点导航器>“”在左下角
今天关于是否有等效于 iOS Objective C 的内部异常?的介绍到此结束,谢谢您的阅读,有关iOS 18发布啦!iOS 18好吗?iOS 18值得更新吗?iOS 18beta版、iOS 开发 iOS 应用开发 iOS 软件定制 iOS 电子点餐、iOS:开源 VoIP/SIP Objective-C 代码 [关闭] - iOS: Open Source VoIP/SIP Objective-C Code [closed]、objective-c – iOS,Objective c在一开始就抛出异常等更多相关知识的信息可以在本站进行查询。
本文标签: