菜鸟教程小白 发表于 2022-12-12 20:51:45

ios - 未调用 NSFectchedResultController 委托(delegate)?


                                            <p><p>我在我的应用程序中使用 <code>NSFetchedResultController</code> 和 <code>core data</code>。但是当我插入新记录时,不会调用 <code>NSFetchedResultController 委托(delegate)</code> 方法,但是当我尝试删除或更新现有记录时它会起作用。这是我的代码 - </p>

<pre><code>- (void)viewDidLoad
{
    ;
    // Do any additional setup after loading the view.


    //fetch friends from DB
    AppDelegate* appDelegate = .delegate;
    self.managedObjectContext = appDelegate.managedObjectContext;

    NSError *error;
    if (![ performFetch:&amp;error]) {
      // Update to handle the error appropriately.
      NSLog(@&#34;Unresolved error %@, %@&#34;, error, );
      exit(-1);// Fail
    }
}

- (NSFetchedResultsController *)fetchedResultsController {

    if (_fetchedResultsController != nil) {
      return _fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [ init];
    NSEntityDescription *entity = [NSEntityDescription
                                 entityForName:@&#34;Friends&#34; inManagedObjectContext:self.managedObjectContext];
    ;

    ;

    NSPredicate *predicate = ;
    ;

    NSSortDescriptor *sort = [
                              initWithKey:@&#34;userId&#34; ascending:NO];
    ];

    NSFetchedResultsController *theFetchedResultsController =
    [ initWithFetchRequest:fetchRequest
                                        managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil
                                                   cacheName:@&#34;Root&#34;];
    self.fetchedResultsController = theFetchedResultsController;
    _fetchedResultsController.delegate = self;

    return _fetchedResultsController;

}
</code></pre>

<p>这个用于保存/更新/删除 -</p>

<pre><code>-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

    if (alertView.tag == 1001) {

      if (buttonIndex == 0) { // add new friend

            NSString* fid = [.text stringByTrimmingCharactersInSet:];
            if (fid.length == 0) {

                ;
                return;
            }
            NSString* userid = [ valueForKey:@&#34;userId&#34;];

            NSString* req = ;

            if () {

                ;
                return;
            }
            [ConnectionManager invokeAsync:@&#34;GET&#34; body:req request:@&#34;/friends&#34; viewForHud:self.view completion:^(NSDictionary* res, NSString* error){

                if (error) {

                  UIAlertView* alert = [ initWithTitle:@&#34;Error!&#34; message:error delegate:Nil cancelButtonTitle:@&#34;OK&#34; otherButtonTitles:Nil, nil];
                  ;
                }
                else
                {

                  Friends * newEntry = ;
                  newEntry.userId = userid;
                  newEntry.friendId = fid;
                  newEntry.status = @&#34;0&#34;;

                  NSError *error;
                  if (!) {
                        NSLog(@&#34;Whoops, couldn&#39;t save: %@&#34;, );
                  }
                  //;
                  //;
                  UIAlertView* alert = [ initWithTitle:@&#34;Success!&#34; message: delegate:Nil cancelButtonTitle:@&#34;OK&#34; otherButtonTitles:Nil, nil];
                  ;
                }
            }];
      }
    }
    else if (alertView.tag == 1002){ // delete friend

      NSManagedObject *managedObject = ;
      ;
      ;
       ;

      UIAlertView * alert = [ initWithTitle:@&#34;Success!&#34; message:@&#34;Friend removed from your friend list.&#34; delegate:Nil cancelButtonTitle:@&#34;Ok&#34; otherButtonTitles:Nil, nil];
      ;
    }
    else if (alertView.tag == 1003){ // update friend


      NSString* req = ;

      [ConnectionManager invokeAsync:@&#34;GET&#34; body:req request:@&#34;/friends&#34; viewForHud:self.view completion:^(NSDictionary* res, NSString* error){

            if (error) {

                UIAlertView* alert = [ initWithTitle:@&#34;Error!&#34; message:error delegate:Nil cancelButtonTitle:@&#34;OK&#34; otherButtonTitles:Nil, nil];
                ;
            }
            else
            {
                NSString* userid = [ valueForKey:@&#34;userId&#34;];
                Friends* newFriend;
                NSError * error;
                NSFetchRequest * fetchRequest = [ init];
                [fetchRequest setEntity:[NSEntityDescription entityForName:@&#34;Friends&#34;
                                                    inManagedObjectContext:managedObjectContext]];
                ;

                ];

                if ()
                  newFriend = [ lastObject];

                newFriend.status = @&#34;1&#34;;


                // save
                if (! )
                  NSLog(@&#34;Couldn&#39;t save data to %@&#34;, NSStringFromClass());

                ;

                UIAlertView * alert = [ initWithTitle:@&#34;Success!&#34; message:@&#34;Friend blocked from your friend list.&#34; delegate:Nil cancelButtonTitle:@&#34;Ok&#34; otherButtonTitles:Nil, nil];
                ;
            }
      }];

    }

}
</code></pre>

<p>数据已保存到数据库但未重新加载 TableView 。我做错了什么?任何建议将不胜感激。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我猜是问题</p>

<pre><code>NSPredicate *predicate = ;
</code></pre>

<p>用 </p> 改变它

<pre><code>NSPredicate *predicate = ;
</code></pre>

<p>希望这会有所帮助..</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 未调用 NSFectchedResultController 委托(delegate)?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/22688757/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/22688757/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 未调用 NSFectchedResultController 委托(delegate)?