سؤال

على سبيل المثال عند تمرير أ 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]];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top