小编dim*_*ios的帖子

NSKeyedUnarchiver unarchiveObjectWithData崩溃 - 无法捕获异常?

我有以下代码:

@try {
    NSSet *set = [NSKeyedUnarchiver unarchiveObjectWithData:mData];
}
@catch (NSException *exception) {
    // Use default data
}
Run Code Online (Sandbox Code Playgroud)

在某些时候,似乎我没有正确归档并且mData已损坏.这给了我以下错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '*** -[NSKeyedUnarchiver initForReadingWithData:]: 
incomprehensible archive (0x14, 0xffffff9a, 0xffffffd0, 0x1d, 0x9, 0x3d, 0x43, 0x3)'
*** Call stack at first throw:
Run Code Online (Sandbox Code Playgroud)

如果try/catch块不起作用,我该如何在这里检查异常?它不应该工作吗?

谢谢.

exception-handling objective-c

6
推荐指数
1
解决办法
1465
查看次数

NSDictionary allKeys崩溃 - 无法理解崩溃报告的情况

我有以下代码:

- (Item *) getRandomItem {
    if (itemIDs == nil) {
        [self parse];
    }
    NSArray * allKeys = [allItems allKeys];
    int seed = arc4random()%[allKeys count];
    return [self getItemByID:[allKeys objectAtIndex:seed]];
}
Run Code Online (Sandbox Code Playgroud)

它有时会在实时应用程序崩溃,但我们无法重现崩溃.我一直在试图分析报告并了解可能导致崩溃的原因,但我没有成功.我试图篡改allItems对象以产生崩溃的任何方式导致与此处报告的错误不同的错误.

我想帮助理解在什么情况下会发生以下崩溃:

Hardware Model:      iPhone3,1
Code Type:       ARM (Native)
Parent Process:  launchd [1]
OS Version:      iPhone OS 5.0.1 (9A405)
Report Version:  104
Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000010
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x3427eb30 _class_isInitialized
1 …
Run Code Online (Sandbox Code Playgroud)

crash objective-c crash-reports ios

5
推荐指数
1
解决办法
2418
查看次数

iTunesConnect(OSX)无法识别CFBundleLocalizations中的本地化

我在Mac App Store的OSX项目中添加了几个本地化,提交了应用程序,但只识别了英语(本地化:("英语"),取自ITC Binary Details).该产品在iTunes上运行,其中英语是唯一显示的语言.

使用自定义系统处理本地化字符串,因此我们不需要像English.lproj这样的额外文件夹.为了本地化应用程序,我刚刚在项目的Info.plist中添加了所有语言标识符,在CFBundleLocalizations关键字下,正如Apple在https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual上所建议的那样./BPInternational/Articles/ChoosingLocalizations.html

应用程序可以通过其信息属性列表(Info.plist)文件通知系统它支持其他本地化.要指定捆绑包的.lproj目录中未包含的本地化,请将CFBundleLocalizations密钥添加到此文件中.键的值是一个字符串数组,每个字符串都包含一个ISO语言指示符,如"语言和语言环境指定"中所述.

plist文件中指定本地化的部分是:

<key>CFBundleLocalizations</key>
<array>
    <string>en</string>
    <string>de</string>
    <string>fr</string>
    <string>it</string>
    <string>es</string>
    <string>pt</string>
    <string>nl</string>
    <string>se</string>
</array>
Run Code Online (Sandbox Code Playgroud)

我过去在2个iOS应用程序上使用了完全相同的方法,并且它们都运行良好.我不明白为什么这次我们得到了不同的行为.有什么想法吗?

谢谢.

macos xcode localization

5
推荐指数
1
解决办法
3563
查看次数

使用CFRelease释放的对象会导致明显的崩溃,但很少发生

我有以下方法:

+ (NSString*) getMD5HashFromFile:(NSString*)filePath {
    CFStringRef md5hash = FileMD5HashCreateWithPath((CFStringRef)filePath, FileHashDefaultChunkSizeForReadingData);
    NSString *hashStr = (NSString*)md5hash;
    CFRelease(md5hash);
    return hashStr;
}
Run Code Online (Sandbox Code Playgroud)

我在模拟器上遇到随机崩溃,大概有20到30次执行.这不一致的事实并没有帮助我更深入地挖掘.

现在我再次看到代码,很明显md5hash在返回之前释放,这意味着返回的对象无效.返回的值以一致的方式在另一个方法中使用,有时会崩溃,但并非总是如此.我的问题是为什么这种情况很少发生而且并非总是如此

是否与Obj-C和C代码的混合以及自动释放池的工作方式有关?

注意:这个错误似乎是通过使用来修复的NSString *hashStr = [NSString stringWithString:(NSString*)md5hash],这对我来说很有意义.

crash objective-c ios

3
推荐指数
1
解决办法
1393
查看次数

静态库公共标头不会复制到Build/Products文件夹

我有两个项目,每个项目构建一个静态库,以及另一个使用两个静态库的项目.

两个静态库中的一个构建正常.另一个没有,原因是它的公共头文件在自定义shell脚本运行之前没有复制到build文件夹.

以下是对所发生情况的演示:

SampleA(工作的那个)

Compile MyClass1.cpp ...
Compile MyClass2.cpp ...
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Create universal binary libSampleA.a ...
Copy SampleA.h ...in /Users/user/....
Copy MyClass1.h ...in /Users/user/....
Copy MyClass2.h ...in /Users/user/....
Run custom shell script 'Prepare Framework'
Stripping libSampleA.a 
--- Build complete
Run Code Online (Sandbox Code Playgroud)

SampleB(不起作用的那个)

Compile OtherClass1.cpp ...
Compile OtherClass2.cpp ...
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Create universal binary libSampleB.a ...
// >>>>> NO HEADER FILES ARE COPIED <<<<<<
Run custom shell script …
Run Code Online (Sandbox Code Playgroud)

xcode archiving static-libraries ios xcode5

3
推荐指数
1
解决办法
5404
查看次数