কোনও এনএসআইন্টারকে কীভাবে একটি ইনটে রূপান্তর করবেন?


98

উদাহরণস্বরূপ যখন কোনও valueবার্তায় NSIntegerযেমন পাঠানো হয়

[a value] এটি একটি EXC_BAD_ACCESS সৃষ্টি করে।

সুতরাং কিভাবে একটি রূপান্তর করতে NSIntegerকরতে int?

যদি এটি প্রাসঙ্গিক হয় তবে কেবলমাত্র ছোট সংখ্যা <32 ব্যবহার করা হয়।


4
আপনি বরং বিভ্রান্ত বলে মনে হচ্ছে। [একটি মান] প্রস্তাব দেয় যে আপনি কোনও বস্তু হওয়ার প্রত্যাশা করছেন তবে এই মুহুর্তে এটি একটি এনএসআইন্টিজার। "ইনটিকে রূপান্তর" করা সমস্যার সমাধান করবে না।
মাইক আবদুল্লাহ

উত্তর:


207

তা দা:

NSInteger myInteger = 42;
int myInt = (int) myInteger;

NSInteger32/64 বিট ইনট ছাড়া আর কিছুই নয়। (আপনি কোন ওএস / প্ল্যাটফর্মটি চালাচ্ছেন তার উপর ভিত্তি করে এটি উপযুক্ত আকারটি ব্যবহার করবে)


13
সুনির্দিষ্টভাবে বলতে গেলে, আমি মনে করি NSInteger 32-বিট প্ল্যাটফর্মগুলির একটি অন্তর্নিহিত এবং 64৪-বিট প্ল্যাটফর্মের উপর দীর্ঘ।
ফ্রেডেরিক অ্যাডা

5
প্রস্তাবিত "
ingালাই

@ ডিজেসিজে, হ্যাঁ, নতুন এসডিকে-র উত্তর সঠিক নয়। আমি মনে করি.
নাজিক

শুধু এনএসআইন্টিজারের সামনে (ইনট) রাখা কি এত সহজ হবে না? উদাহরণস্বরূপ, (int) মাইআইঞ্জিজার যখনই আপনি পূর্ণসংখ্যা ফর্মটি কল করতে চান, যাতে আপনাকে কোনও নতুন ভেরিয়েবল তৈরি করতে না হয়।
chandhooguy

4
@ চন্দহোগুগি আপনি কেন নতুন পরিবর্তনশীল এড়াতে চেষ্টা করছেন?
ড্যান রোজনস্টার্ক

28

আপনি এই ইনলাইন কাজ করতে চান, তাহলে শুধু নিক্ষেপ 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

4
মাত্র কৌতূহলের বাইরে, আপনি কেন ডাবল ডিজিটের ভোট সহ ইতিমধ্যে স্বীকৃত উত্তর রয়েছে এমন একটি প্রশ্নের সত্যতার ২ বছর পরে উত্তর পোস্ট করছেন? বিশেষত আপনার যেহেতু কেবলমাত্র সেই উত্তরটি পুনরায় প্রকাশ করা।
লিলি বালার্ড

6
কারণ আমার উত্তরটি একটি একক লাইন (একটি ইনলাইন ধরণের castালাই ব্যবহার করে - (ইনট)), যা আমি মনে করি ওপি কী চাইবে। আমি নিজে এটি দেখেছি এবং লক্ষ্য করেছি যে বিষয়টির সমস্ত উত্তর বহু-লাইন were
স্যামুয়েল ক্লে

4
গৃহীত উত্তর একটি একক লাইন ব্যবহার করে নিখিল রূপান্তর প্রদর্শন করে demonst অ্যাবিজার্নের উত্তর ব্যাখ্যা করে যে আপনি যদি কোনওটির পরিবর্তে কোনও NSIntegerমান ব্যবহার করার চেষ্টা করেন তবে একটি অন্তর্নিহিত রূপান্তর ঘটবে int। উভয় ক্ষেত্রেই এটি একটি বহু-লাইন সমাধান নয়।
লিলি বালার্ড

25
আমার পরিষ্কার হওয়া উচিত ছিল। যেহেতু এটি কিছুটা আশ্চর্যজনক প্রশ্ন, তাই নবজাতক প্রোগ্রামারদের কাছে এটি স্পষ্ট নাও হতে পারে যে তারা কোনও (অন্তর্) প্রকাশের সাহায্যে ইনলাইন রূপান্তর করতে পারে। অন্যান্য উত্তরগুলি এটি দেখায় না এবং আমি মনে করি এটি এই পৃষ্ঠায় হোঁচট খেয়ে যে কাউকে সহায়তা করে।
স্যামুয়েল ক্লে

4
এবং আমি আরও দেড় বছর পরে এই পৃষ্ঠায় হোঁচট খেয়েছি , বিশেষত NSUInteger- সম্পর্কিত সম্পর্কিত কাস্টের প্রয়োজন । ধন্যবাদ, স্যামুয়েল!
লীন

18

আমি পরিস্থিতি যেখানে আপনি একটি রূপান্তর করতে হবে সম্পর্কে নিশ্চিত নই NSIntegerএকটি থেকে int

এনএসআইঞ্জার কেবলমাত্র টাইপেইফ:

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এটিকে রূপান্তর না করে ব্যবহার করতে পারেন ।


4
NSUinteger কে একটি int: মান তুলনাতে রূপান্তর করতে চাওয়ার একটি ভাল কারণ। (int i = -1)> (NSUinteger j = 14) int-কে স্বাক্ষরবিহীন রূপান্তরিত করে, যার অর্থ -1> 14, যা আপনি চান তা নয়।
স্যামুয়েল ক্লে

4
@ সামুয়েলক্লে নির্দিষ্ট ক্ষেত্রে ব্যবহৃত হয় যখন একটি ভাল পয়েন্ট। ব্যক্তিগতভাবে, আমি একটি এনএসইউইন্টারকে একটি ইউন্টে রূপান্তর করব। যাহোক. প্রশ্নটি এনএসআইএনটেইজারকে নয়, এনএসইএনটেইজারকে রূপান্তর করার বিষয়ে ছিল।
আবিজার্ন

আমি কেবলমাত্র একটি সাধারণ বিপদ চিত্রিত করার জন্য একটি স্বাক্ষরবিহীন int ব্যবহার করেছি। এটি আমার জবাব হিসাবে দেখায় যে এটি উভয়ের জন্য একই ধরণের ratesালাই। এটি কোনও কঠিন সমস্যা নয়, তবে এটি যথেষ্ট সাধারণ এবং আমি এখনও কাউকে একটি একক-লাইনের উত্তরের প্রস্তাব দিতে দেখিনি।
স্যামুয়েল ক্লে

0

UIsegmentedControl এ সাধারণত ব্যবহৃত হয়, 32 বিটের পরিবর্তে 64৪ বিটগুলিতে সংকলন করার সময় "ত্রুটি" উপস্থিত হয়, এটি কোনও নতুন ভেরিয়েবলের কাছে না দেওয়ার সহজ উপায় হ'ল এই টিপসটি ব্যবহার করা, ( যোগ করা ) :

[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];

পরিবর্তে :

[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.