كيفية تحويل nsinteger إلى int؟
-
20-09-2019 - |
سؤال
على سبيل المثال عند تمرير أ value
رسالة إلى NSInteger
مثال مثل ذلك
[a value]
يسبب exc_bad_access.
فكيف تحويل NSInteger
ل int
?
إذا كانت ذات صلة بأعداد صغيرة فقط <32 يتم استخدامها.
المحلول
تا دا:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
ليس أكثر من 32/64 بت int. (سوف يستخدم الحجم المناسب بناءً على نظام التشغيل/النظام الأساسي الذي تقوم بتشغيله)
نصائح أخرى
إذا كنت ترغب في القيام بذلك مضمّنًا ، فما عليك سوى إلقاء NSUInteger
أو NSInteger
إلى int
:
int i = -1;
NSUInteger row = 100;
i > row // true, since the signed int is implicitly converted to an unsigned int
i > (int)row // false
لست متأكدًا من الظروف التي تحتاج إلى تحويلها NSInteger
إلى int
.
Nsinteger هو مجرد typedef:
تستخدم Nsinteger لوصف عدد صحيح بشكل مستقل عما إذا كنت تقوم ببناء نظام 32 بت أو 64 بت.
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
يمكنك استخدام NSInteger
أي مكان تستخدمه int
دون تحويله.
يستخدم "الخطأ" الذي يستخدم بشكل شائع في uisegmentedcontrol ، عند التجميع في 64 بايت بدلاً من 32 بايت ، وسيلة سهلة لعدم تمريرها إلى متغير جديد هو استخدام هذه النصائح ، إضافة (int):
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
بدلاً من :
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];