私は、タグを使って1の5、1の16、または1の10のUIButtons
を識別する初期のプロジェクトを改訂しています。私はthis answerの私の理解に基づいてカスタマイズされたプロパティでタグを置き換えたいです。これがObjective Cでカスタマイズされた文字列プロパティを使用する正しい方法なら、なぜ正しい数値を抽出できないのですか?
と呼ばれるプロパティは、文字列の後に整数が続くものです。これは別の名前のタグでもよいかもしれませんが、単純な整数タグではできないようにメッセージソースを一意に識別し、自分のコードからマジックナンバーを消去し、うまくいけばドキュメントを改善します。
プロパティ
は、カテゴリを使用して作成されのUIView + CustomProperties.m
#import "UIView+CustomProperties.h"
@implementation UIView (MyInfo)
-(void)setMyInfo:(id)info
{
objc_setAssociatedObject(self, "_myInfo", info, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(id)myInfo
{
return objc_getAssociatedObject(self, "_myInfo") ;
}
@end
そしてmyInfo
作品、私はobjc/runtime.h
のUIView + CUSTOMPROPERTIESをインポートします。
#import <objc/runtime.h>
@interface UIView (MyInfo)
@property (nonatomic, strong) id myInfo;
@end
私は、ボタンのいくつかのセットを作成するUIViewに(下記)メソッドからカテゴリを呼び出します。
// define type and number of 5, 16 or 10 buttons
switch (buttonCount) {
case 5:
roundButton.myInfo = [NSString stringWithFormat:@"transpose index %i", i ];
break;
case 16:
roundButton.myInfo = [NSString stringWithFormat:@"player index %i", i ];
break;
case 10:
roundButton.myInfo = [NSString stringWithFormat:@"note index %i", i ];
break;
default:
roundButton.myInfo = @“orphan button“;
break;
}
私はthis methodを使用してmyInfo
からすべての非数値文字を剥ぎ取るしようとしたメッセージの送信元を特定すること。しかし、問題は、私は私がビルドして実行し、押しボタン1ときに数字以外の文字
- (void)fromButtons:(UIButton*)button {
NSLog(@"Button %ld tapped", (long int)[button tag]);
NSLog(@"first, %@", button.myInfo);
NSString *newString = [[button.myInfo componentsSeparatedByCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
componentsJoinedByString:@""];
NSLog(@"then, %@", newString);
NSLog(@"and %li", (long int)newString);
を削除しようとして、私の選択方法forButtons
に表示されます農産物上記NSLog
文次のログ
2017-05-25 18:27:33.147 SatGam3[930:607301] Button 1 tapped
2017-05-25 18:27:33.147 SatGam3[930:607301] first, transpose index 1
2017-05-25 18:27:33.148 SatGam3[930:607301] then, 1
2017-05-25 18:27:33.148 SatGam3[930:607301] and 2070247168
元のタグのlong int
の値は正しいです。つまり、カスタマイズされたプロパティから復元されたlong int
は2070247168です。
Q.1最初に、このアプローチは正しい?
Q.2その場合、誰かがなぜ9桁の数値をmyInfo
から抽出するのか説明してください。
ロッド、これは受け入れられる回答でなければなりません。提供されたすべてのソリューションは、「NSString」の使用に関連する問題に対処しましたが、この回答は私が何を疑っているかを確認します。情報を別の方法でエンコードするほうがよいかもしれないことを示しています。 '-description'がなくても、' * name'と 'index'のための別のボタンプロパティで既に明確になっています。ありがとう。 – Greg