• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Mac用艦これ専用ブラウザ おまけ機能付き


Commit MetaInfo

Revisionc3dbd8c0817f6ba7225186d749bd5d59ce9f1682 (tree)
Time2015-09-15 22:37:29
Authormasakih <masakih@user...>
Commitermasakih

Log Message

艦娘を解体すると落ちる問題を解消

艦隊に配備した艦娘を解体または近代化改修に使用すると落ちる問題を解消

close #35534

Change Summary

Incremental Difference

--- a/KCD/HMSlotItemLevelView.m
+++ b/KCD/HMSlotItemLevelView.m
@@ -16,18 +16,54 @@ static CGImageRef sMaskImage = nil;
1616
1717 @interface HMSlotItemLevelView ()
1818
19-@property (strong) HMKCSlotItemObject *slotItem;
19+@property (strong) NSObjectController *slotItemController;
20+
21+@property (nonatomic, strong) NSNumber *slotItemLevel;
22+@property (nonatomic, strong) NSNumber *slotItemAlv;
2023
2124 @end
2225
2326 @implementation HMSlotItemLevelView
2427
28+- (instancetype)initWithFrame:(NSRect)frameRect
29+{
30+ self = [super initWithFrame:frameRect];
31+ if(self) {
32+ _slotItemController = [NSObjectController new];
33+ [self bind:@"slotItemLevel"
34+ toObject:_slotItemController
35+ withKeyPath:@"selection.level"
36+ options:nil];
37+ [self bind:@"slotItemAlv"
38+ toObject:_slotItemController
39+ withKeyPath:@"selection.alv"
40+ options:nil];
41+ }
42+ return self;
43+}
44+- (instancetype)initWithCoder:(NSCoder *)coder
45+{
46+ self = [super initWithCoder:coder];
47+ if(self) {
48+ _slotItemController = [NSObjectController new];
49+ [self bind:@"slotItemLevel"
50+ toObject:_slotItemController
51+ withKeyPath:@"content.level"
52+ options:nil];
53+ [self bind:@"slotItemAlv"
54+ toObject:_slotItemController
55+ withKeyPath:@"content.alv"
56+ options:nil];
57+ }
58+ return self;
59+}
2560 - (void)dealloc
2661 {
27- [self.slotItem removeObserver:self forKeyPath:@"level"];
28- [self.slotItem removeObserver:self forKeyPath:@"alv"];
62+ [self unbind:@"slotItemLevel"];
63+ [self unbind:@"slotItemAlv"];
2964 }
3065
66+
3167 - (CGImageRef)maskImage
3268 {
3369 if(sMaskImage) return sMaskImage;
@@ -301,15 +337,10 @@ static CGImageRef sMaskImage = nil;
301337 return shadow;
302338 }
303339
304-- (NSNumber *)slotItemAlv
340+- (void)setSlotItemLevel:(NSNumber *)slotItemLevel
305341 {
306- if(!self.slotItemID) return nil;
307-
308- if(!self.slotItem) {
309- [self fetchSlotItem];
310- }
311-
312- return self.slotItem.alv;
342+ _slotItemLevel = slotItemLevel;
343+ self.needsDisplay = YES;
313344 }
314345
315346
@@ -345,26 +376,19 @@ static CGImageRef sMaskImage = nil;
345376 [attrString drawInRect:rect];
346377 }
347378
348-- (NSNumber *)slotItemLevel
379+- (void)setSlotItemAlv:(NSNumber *)slotItemAlv
349380 {
350- if(!self.slotItemID) return nil;
351-
352- if(!self.slotItem) {
353- [self fetchSlotItem];
354- }
355-
356- return self.slotItem.level;
381+ _slotItemAlv = slotItemAlv;
382+ self.needsDisplay = YES;
357383 }
358384
359385 #pragma mark - property
360386
361387 - (void)fetchSlotItem
362388 {
363- [self.slotItem removeObserver:self forKeyPath:@"level"];
364- [self.slotItem removeObserver:self forKeyPath:@"alv"];
389+ self.slotItemController.content = nil;
365390
366391 if(!self.slotItemID || [self.slotItemID isEqual:@(-1)]) {
367- self.slotItem = nil;
368392 return;
369393 }
370394
@@ -375,37 +399,21 @@ static CGImageRef sMaskImage = nil;
375399 predicateFormat:@"id = %@", self.slotItemID];
376400 if(error) {
377401 NSLog(@"SlotItem is invalid -> %@", error);
378- self.slotItem = nil;
379402 return;
380403 }
381404 if(array.count == 0) {
382405 NSLog(@"Can not find slotItem for %@", self.slotItemID);
383- self.slotItem = nil;
384406 return;
385407 }
386408
387- self.slotItem = array[0];
388-
389- [self.slotItem addObserver:self forKeyPath:@"level" options:0 context:NULL];
390- [self.slotItem addObserver:self forKeyPath:@"alv" options:0 context:NULL];
409+ self.slotItemController.content = array[0];
391410 }
392411 - (void)setSlotItemID:(NSNumber *)slotItemID
393412 {
394413 if([self.slotItemID isEqual:slotItemID]) return;
395- self.slotItem = nil;
396414 _slotItemID = slotItemID;
397415 [self fetchSlotItem];
398416 self.needsDisplay = YES;
399417 }
400418
401-- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
402-{
403- if([keyPath isEqualToString:@"level"] || [keyPath isEqualToString:@"alv"]) {
404- self.needsDisplay = YES;
405- return;
406- }
407-
408- [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
409-}
410-
411419 @end