NSFetchRequest

From binaryoption
Jump to navigation Jump to search
Баннер1
    1. طلب الجلب NSFetchRequest: دليل شامل للمبتدئين

NSFetchRequest هو فئة أساسية في إطار عمل Core Data في iOS، تستخدم لاسترجاع البيانات من Persistent Data Store. يعمل كآلية قوية ومرنة لتحديد البيانات التي تريد استردادها، وكيفية ترتيبها، وما إذا كنت تريد تصفيتها. هذا المقال موجه للمبتدئين ويهدف إلى توفير فهم شامل لكيفية استخدام `NSFetchRequest` بفعالية.

ما هو NSFetchRequest؟

ببساطة، `NSFetchRequest` هو كائن يمثل طلبًا لاسترداد بيانات من قاعدة بيانات Core Data. بدلاً من كتابة استعلامات SQL مباشرة (وهو ما لا يفعله المطور عادةً في Core Data)، فإنك تقوم بإنشاء كائن `NSFetchRequest`، وتحديد معايير الجلب، ثم تنفذ الطلب عبر سياق الإدارة (NSManagedObjectContext).

يشبه الأمر إرسال طلب إلى خادم قاعدة البيانات، ولكن بدلاً من كتابة الاستعلام بنفسك، فإنك تصف ما تريده، ويتولى Core Data التحويل إلى استعلام فعال.

إنشاء NSFetchRequest

لبدء استخدام `NSFetchRequest`، تحتاج أولاً إلى إنشائه. يتم ذلك عادةً باستخدام طريقة `init()` للفئة:

```objectivec NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; ```

بعد إنشاء `NSFetchRequest`، تحتاج إلى تحديد الكيان (NSEntityDescription) الذي تريد استرداد البيانات منه. الكيان يمثل جدولاً في قاعدة البيانات العلائقية، ويمثل نوع البيانات التي تريد جلبها.

```objectivec NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext]; fetchRequest.entity = entity; ```

في هذا المثال، `MyEntity` هو اسم الكيان الذي تريد استرداد البيانات منه، و `managedObjectContext` هو سياق الإدارة الذي تستخدمه.

تحديد معايير الجلب (Fetch Predicates)

أحد أهم جوانب `NSFetchRequest` هو القدرة على تحديد معايير الجلب. تسمح لك معايير الجلب بتصفية البيانات التي يتم إرجاعها بناءً على شروط محددة. يتم إنشاء معايير الجلب باستخدام فئة `NSPredicate`.

```objectivec NSPredicate *predicate = [NSPredicate predicateWithFormat:@"attributeName == %@", @"desiredValue"]; fetchRequest.predicate = predicate; ```

في هذا المثال، `attributeName` هو اسم السمة التي تريد تصفيتها، و `desiredValue` هي القيمة التي تريد مطابقتها. يمكنك استخدام مجموعة متنوعة من العوامل في `NSPredicate` لإنشاء شروط تصفية معقدة.

  • == (يساوي)
  • != (لا يساوي)
  • '>' (أكبر من)
  • '<' (أصغر من)
  • '>=' (أكبر من أو يساوي)
  • '<=' (أصغر من أو يساوي)
  • BEGINSWITH (يبدأ بـ)
  • ENDSWITH (ينتهي بـ)
  • CONTAINS (يحتوي على)
  • LIKE (يشبه - يستخدم مع أحرف البدل)

يمكنك أيضاً استخدام `AND` و `OR` و `NOT` لدمج شروط متعددة.

مثال على معيار جلب أكثر تعقيدًا:

```objectivec NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(attribute1 == %@) AND (attribute2 > %d)", @"value1", 10]; fetchRequest.predicate = predicate; ```

تحديد ترتيب الجلب (Sort Descriptors)

بشكل افتراضي، لا يتم ترتيب البيانات التي يتم إرجاعها بواسطة `NSFetchRequest`. يمكنك تحديد ترتيب الجلب باستخدام فئة `NSSortDescriptor`.

```objectivec NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"attributeName" ascending:YES]; fetchRequest.sortDescriptors = @[sortDescriptor]; ```

في هذا المثال، `attributeName` هو اسم السمة التي تريد الترتيب بناءً عليها، و `ascending:YES` يعني أن الترتيب سيكون تصاعديًا (من الأصغر إلى الأكبر). إذا كنت تريد ترتيبًا تنازليًا، فاستخدم `ascending:NO`.

يمكنك تحديد ترتيبات متعددة عن طريق إضافة المزيد من `NSSortDescriptor` إلى المصفوفة `sortDescriptors`.

تحديد حدود الجلب (Fetch Limit & Offset)

في بعض الأحيان، قد لا ترغب في استرداد جميع البيانات من الكيان. يمكنك تحديد حد للجلب باستخدام خاصية `fetchLimit`.

```objectivec fetchRequest.fetchLimit = 10; // استرداد أول 10 عناصر فقط ```

يمكنك أيضاً تحديد إزاحة للجلب باستخدام خاصية `fetchOffset`.

```objectivec fetchRequest.fetchOffset = 20; // تخطي أول 20 عنصرًا واسترداد العناصر التالية ```

هذا مفيد للتنفيذ Pagination.

استرداد البيانات

بعد تحديد جميع معايير الجلب، يمكنك تنفيذ `NSFetchRequest` واسترداد البيانات. يتم ذلك باستخدام طريقة `executeFetchRequest:` لسياق الإدارة.

```objectivec NSError *error; NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

if (error) {

   // معالجة الخطأ
   NSLog(@"Error fetching data: %@", error.localizedDescription);

} else {

   // معالجة النتائج
   for (MyEntity *entity in results) {
       // الوصول إلى بيانات الكيان
       NSLog(@"Attribute value: %@", entity.attributeName);
   }

} ```

النتائج هي مصفوفة من كائنات `NSManagedObject` التي تطابق معايير الجلب.

خصائص إضافية لـ NSFetchRequest

  • resultType: يحدد نوع النتائج التي يتم إرجاعها. القيم المحتملة هي `NSManagedObjectResultType`, `NSDictionaryResultType`, و `NSCountResultType`.
  • propertiesToFetch: يحدد مجموعة فرعية من الخصائص التي يتم إرجاعها لكل كائن. هذا يمكن أن يحسن الأداء إذا كنت لا تحتاج إلى جميع الخصائص.
  • relationshipKeyPathsForPrefetching: يحدد العلاقات التي يجب جلبها مسبقًا. هذا يمكن أن يحسن الأداء إذا كنت بحاجة إلى الوصول إلى العلاقات بعد جلب الكائنات الرئيسية.

أمثلة متقدمة

  • **استرداد البيانات مرتبة حسب تاريخ الإنشاء تنازليًا:**

```objectivec NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO]; fetchRequest.sortDescriptors = @[sortDescriptor]; ```

  • **استرداد البيانات حيث الاسم يحتوي على سلسلة معينة:**

```objectivec NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS %@", @"searchString"]; fetchRequest.predicate = predicate; ```

  • **استرداد عدد الكائنات التي تطابق معيارًا معينًا:**

```objectivec fetchRequest.resultType = NSCountResultType; NSNumber *count = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; NSLog(@"Number of objects: %@", count); ```

NSFetchRequest و الخيارات الثنائية (Binary Options)

قد يبدو ربط `NSFetchRequest` بالخيارات الثنائية غريبًا، لكن يمكن استخدام مبادئ إدارة البيانات واسترجاعها بكفاءة لتحسين أداء تطبيقات تداول الخيارات الثنائية. على سبيل المثال:

  • **تحليل بيانات السوق:** يمكن استخدام Core Data و `NSFetchRequest` لتخزين وتحليل بيانات السوق التاريخية (أسعار الأسهم، المؤشرات، إلخ). يمكن استخدام معايير الجلب لتصفية البيانات بناءً على فترات زمنية محددة أو مؤشرات معينة.
  • **تخزين استراتيجيات التداول:** يمكن تخزين استراتيجيات التداول المختلفة ككيانات في Core Data، واستخدام `NSFetchRequest` لاسترداد الاستراتيجيات بناءً على معايير مثل الأصول المتداولة، ومستوى المخاطرة، ومعدل العائد المتوقع. هذا يسمح بتطبيق Backtesting فعال.
  • **تسجيل عمليات التداول:** يمكن تسجيل جميع عمليات التداول في Core Data، واستخدام `NSFetchRequest` لتحليل الأداء وتحديد الاتجاهات.
  • **إدارة الحساب:** يمكن تخزين معلومات الحساب (الرصيد، الأرباح، الخسائر) في Core Data، واستخدام `NSFetchRequest` لاسترداد هذه المعلومات لعرضها على المستخدم.
    • تحليل حجم التداول:** يمكن استخدام `NSFetchRequest` لتجميع وتحليل حجم التداول لتحديد الاتجاهات المحتملة.
    • الاتجاهات:** يمكن استخدام `NSFetchRequest` لتحديد الاتجاهات الصاعدة والهابطة في أسعار الأصول.
    • أسماء الاستراتيجيات:** يمكن استخدام `NSFetchRequest` لتخزين واسترداد أسماء الاستراتيجيات المختلفة المستخدمة في تداول الخيارات الثنائية.

الخلاصة

`NSFetchRequest` هو أداة قوية ومرنة لاسترداد البيانات من Core Data. من خلال فهم كيفية إنشاء وتكوين `NSFetchRequest`، يمكنك كتابة تطبيقات iOS فعالة وذات أداء عالٍ. تذكر أن التخطيط الجيد للبيانات واستخدام معايير الجلب والترتيب المناسبة يمكن أن يحسن بشكل كبير من أداء تطبيقك. استخدام `NSFetchRequest` بفعالية يساهم في بناء تطبيقات قوية وموثوقة، حتى في مجالات متخصصة مثل تداول الخيارات الثنائية.

Core Data NSManagedObjectContext NSPredicate NSSortDescriptor NSEntityDescription Pagination Backtesting 60-Second Strategy Binary Options Scalping Range Trading Trend Following Bollinger Bands Strategy MACD Strategy RSI Strategy Stochastic Oscillator Strategy Pivot Point Strategy Hedging Strategy Moving Averages Exponential Moving Averages Fibonacci Retracements تحليل البيانات إدارة البيانات تطبيقات iOS قواعد البيانات البرمجة الشيئية Swift Objective-C الخوارزميات

ابدأ التداول الآن

سجّل في IQ Option (الحد الأدنى للإيداع 10 دولار) افتح حساباً في Pocket Option (الحد الأدنى للإيداع 5 دولار)

انضم إلى مجتمعنا

اشترك في قناة Telegram الخاصة بنا @strategybin لتصلك: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات اتجاهات السوق ✓ مواد تعليمية للمبتدئين

Баннер