簡體   English   中英

NSMutableAttributedString的問題

[英]Issue with NSMutableAttributedString

目前,我們正在對一個新應用進行Beta測試,但我遇到了一些我不了解的崩潰問題。 它不會在我的設備或模擬器上發生,但會在我們部署用於測試的現場的一些設備上崩潰。 與此相關的代碼是:

@implementation NSMutableAttributedString (Helper)

-(NSRange)appendString:(NSString *)string withAttributes:(NSDictionary *)attributes {

     if (![self respondsToSelector:@selector(length)]) {
         DDLogError(@"SELF can't respond to length selector. Wonder what is going on here... \n%@", [NSThread callStackSymbols]);
         DDLogError(@"SELF is of type %@", [self class]);
     }

     NSUInteger loc = self.length;
     if (string == nil) return NSMakeRange(loc, 0);

     if (![string isKindOfClass:[NSString class]]) {
         DDLogError(@"Got a non string in my appendString function.  Wonder what is going on here... \n%@", [NSThread callStackSymbols]);
         DDLogError(@"string is of type %@", [string class]);
         return NSMakeRange(loc, 0);
     }




     [self.mutableString appendString:string];
     NSRange ret = NSMakeRange(loc, string.length);
     if (attributes != nil) [self addAttributes:attributes range:ret];
     return ret;
}

-(NSRange)appendString:(NSString *)string {    
     return [self appendString:string withAttributes:nil]; // THIS IS LINE 40!
}
@end

崩潰日志如下所示:

Incident Identifier: F9945D73-60D1-438D-B2CE-76634A501D69
CrashReporter Key:   91DBE709-85A2-4F9E-AF82-6D7C0248F443
Hardware Model:      iPhone3,1
Process:         HDScores [152]
Path:            /Users/USER/HDScores.app/HDScores
Identifier:      com.hdscores.consumer.service.clients.ios
Version:         1.23
Code Type:       ARM
Parent Process:  launchd [1]

Date/Time:       2014-07-16T19:56:43Z
OS Version:      iPhone OS 7.1.2 (11D257)
Report Version:  104

Exception Type:  SIGSEGV
Exception Codes: SEGV_ACCERR at 0x6570706d
Crashed Thread:  0

Application Specific Information:
objc_msgSend() selector name: length

Thread 0 Crashed:
0   libobjc.A.dylib                      0x3a33d626 objc_msgSend + 6
1   TextToSpeech                         0x374a0431 TTSCopyModificationDateForFileAtURL + 1610
2   HDScores                             0x00030935 -[NSMutableAttributedString(Helper) appendString:] (NSMutableAttributedString+Helper.m:40)
3   HDScores                             0x00037fe7 -[EstablishmentDetailViewController viewDidLoad] (EstablishmentDetailViewController.m:170)
4   UIKit                                0x323a44ab -[UIViewController loadViewIfRequired] + 516
5   UIKit                                0x3244ebe1 -[UINavigationController _layoutViewController:] + 30
6   UIKit                                0x3244eaf7 -[UINavigationController _updateScrollViewFromViewController:toViewController:] + 228
7   UIKit                                0x3244e0d3 -[UINavigationController _startTransition:fromViewController:toViewController:] + 76
8   UIKit                                0x3244ddfd -[UINavigationController _startDeferredTransitionIfNeeded:] + 570
9   UIKit                                0x3244db6d -[UINavigationController __viewWillLayoutSubviews] + 42
10  UIKit                                0x3244db05 -[UILayoutContainerView layoutSubviews] + 182
11  UIKit                                0x025d1ab3 0x2580000 + 334515
12  UIKit                                0x3239fd59 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 378
13  QuartzCore                           0x3201d62b -[CALayer layoutSublayers] + 140
14  QuartzCore                           0x32018e3b CA::Layer::layout_if_needed(CA::Transaction*) + 348
15  QuartzCore                           0x32018ccd CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 14
16  QuartzCore                           0x320186df CA::Context::commit_transaction(CA::Transaction*) + 228
17  QuartzCore                           0x320184ef CA::Transaction::commit() + 312
18  QuartzCore                           0x3201221d CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 54
19  CoreFoundation                       0x2fb4e255 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 18
20  CoreFoundation                       0x2fb4bbf9 __CFRunLoopDoObservers + 282
21  CoreFoundation                       0x2fb4bf3b __CFRunLoopRun + 728
22  CoreFoundation                       0x2fab6ebf CFRunLoopRunSpecific + 520
23  CoreFoundation                       0x2fab6ca3 CFRunLoopRunInMode + 104
24  GraphicsServices                     0x349bc663 GSEventRunModal + 136
25  UIKit                                0x3240314d UIApplicationMain + 1134
26  HDScores                             0x0003daab main (main.m:17)
27  libdyld.dylib                        0x3a840ab7 start + 0

有人有想法么? 我可以告訴您DDLogError語句永遠不會被擊中,這是最后一條溝渠,試圖診斷問題。 由於長度不是已知的選擇器,因此似乎正在發送錯誤。 同樣,這僅出現在iPhone上,而不出現在具有相同代碼的iPad上。 到目前為止,只有幾部iPhone(一部是5部,一部是4部),全部都在IOS 7上使用。

只是為了解決這個問題,我能夠解決此問題的方法是重命名了我的輔助函數(例如,它們現在被命名為具有屬性的helperAppendString等)。 由於某種原因,這解決了該問題。 從日志看來,它正在調用其他對象實例,而不是[self appendString withAttributes] ...

聽起來很瘋狂,但是當我重命名功能時,問題就消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM