NSFetchedResultsController controller didChange delegate - assertion failure
I built a tableview, with FRC to show data from core-data. I also implemented the controller didChange delegate, to view the changes in the core-data:
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?)
switch (type)
case .insert:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
tableView.insertRows(at: [indexPath!], with: .left)
break;
case .update:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
self.tableView.reloadRows(at: [indexPath!], with: .left)
break;
case .delete:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
self.tableView.deleteRows(at: [indexPath!], with: .left)
break;
case .move:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
print("type.move: shouldn't get in here!")
break;
when I run I got this on the console:
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:] CoreData: error: Serious application error. An exception was caught
from the delegate of NSFetchedResultsController during a call to
-controllerDidChangeContent:. Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section
after the update (216) must be equal to the number of rows contained
in that section before the update (215), plus or minus the number of
rows inserted or deleted from that section (0 inserted, 0 deleted) and
plus or minus the number of rows moved into or out of that section (0
moved in, 0 moved out). with userInfo (null)
although the app doesn't crash - but the tableview is screwed and doesn't show the date.
swift uitableview core-data delegates nsfetchedresultscontroller
add a comment |
I built a tableview, with FRC to show data from core-data. I also implemented the controller didChange delegate, to view the changes in the core-data:
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?)
switch (type)
case .insert:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
tableView.insertRows(at: [indexPath!], with: .left)
break;
case .update:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
self.tableView.reloadRows(at: [indexPath!], with: .left)
break;
case .delete:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
self.tableView.deleteRows(at: [indexPath!], with: .left)
break;
case .move:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
print("type.move: shouldn't get in here!")
break;
when I run I got this on the console:
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:] CoreData: error: Serious application error. An exception was caught
from the delegate of NSFetchedResultsController during a call to
-controllerDidChangeContent:. Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section
after the update (216) must be equal to the number of rows contained
in that section before the update (215), plus or minus the number of
rows inserted or deleted from that section (0 inserted, 0 deleted) and
plus or minus the number of rows moved into or out of that section (0
moved in, 0 moved out). with userInfo (null)
although the app doesn't crash - but the tableview is screwed and doesn't show the date.
swift uitableview core-data delegates nsfetchedresultscontroller
1
Seems you’ve updated the data (model) via the controller but you’ve not updating the view. I would be useful to see your code in the delegate methodcontrollerDidChangeContent
to help identify the issue.
– andrewbuilder
Nov 14 '18 at 10:23
add a comment |
I built a tableview, with FRC to show data from core-data. I also implemented the controller didChange delegate, to view the changes in the core-data:
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?)
switch (type)
case .insert:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
tableView.insertRows(at: [indexPath!], with: .left)
break;
case .update:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
self.tableView.reloadRows(at: [indexPath!], with: .left)
break;
case .delete:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
self.tableView.deleteRows(at: [indexPath!], with: .left)
break;
case .move:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
print("type.move: shouldn't get in here!")
break;
when I run I got this on the console:
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:] CoreData: error: Serious application error. An exception was caught
from the delegate of NSFetchedResultsController during a call to
-controllerDidChangeContent:. Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section
after the update (216) must be equal to the number of rows contained
in that section before the update (215), plus or minus the number of
rows inserted or deleted from that section (0 inserted, 0 deleted) and
plus or minus the number of rows moved into or out of that section (0
moved in, 0 moved out). with userInfo (null)
although the app doesn't crash - but the tableview is screwed and doesn't show the date.
swift uitableview core-data delegates nsfetchedresultscontroller
I built a tableview, with FRC to show data from core-data. I also implemented the controller didChange delegate, to view the changes in the core-data:
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?)
switch (type)
case .insert:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
tableView.insertRows(at: [indexPath!], with: .left)
break;
case .update:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
self.tableView.reloadRows(at: [indexPath!], with: .left)
break;
case .delete:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
self.tableView.deleteRows(at: [indexPath!], with: .left)
break;
case .move:
if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!
print("type.move: shouldn't get in here!")
break;
when I run I got this on the console:
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:] CoreData: error: Serious application error. An exception was caught
from the delegate of NSFetchedResultsController during a call to
-controllerDidChangeContent:. Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section
after the update (216) must be equal to the number of rows contained
in that section before the update (215), plus or minus the number of
rows inserted or deleted from that section (0 inserted, 0 deleted) and
plus or minus the number of rows moved into or out of that section (0
moved in, 0 moved out). with userInfo (null)
although the app doesn't crash - but the tableview is screwed and doesn't show the date.
swift uitableview core-data delegates nsfetchedresultscontroller
swift uitableview core-data delegates nsfetchedresultscontroller
edited Nov 14 '18 at 12:08
Aviram Net
asked Nov 14 '18 at 9:32
Aviram NetAviram Net
5,53942754
5,53942754
1
Seems you’ve updated the data (model) via the controller but you’ve not updating the view. I would be useful to see your code in the delegate methodcontrollerDidChangeContent
to help identify the issue.
– andrewbuilder
Nov 14 '18 at 10:23
add a comment |
1
Seems you’ve updated the data (model) via the controller but you’ve not updating the view. I would be useful to see your code in the delegate methodcontrollerDidChangeContent
to help identify the issue.
– andrewbuilder
Nov 14 '18 at 10:23
1
1
Seems you’ve updated the data (model) via the controller but you’ve not updating the view. I would be useful to see your code in the delegate method
controllerDidChangeContent
to help identify the issue.– andrewbuilder
Nov 14 '18 at 10:23
Seems you’ve updated the data (model) via the controller but you’ve not updating the view. I would be useful to see your code in the delegate method
controllerDidChangeContent
to help identify the issue.– andrewbuilder
Nov 14 '18 at 10:23
add a comment |
1 Answer
1
active
oldest
votes
my mistake was that on insert and update I referred to indexPath instead of newIndexPath...
it should be:
case .insert:
if newIndexPath != nil && (newIndexPath?.row)! < (controller.fetchedObjects?.count)!
tableView.insertRows(at: [newIndexPath!], with: .left)
break;
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53296926%2fnsfetchedresultscontroller-controller-didchange-delegate-assertion-failure%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
my mistake was that on insert and update I referred to indexPath instead of newIndexPath...
it should be:
case .insert:
if newIndexPath != nil && (newIndexPath?.row)! < (controller.fetchedObjects?.count)!
tableView.insertRows(at: [newIndexPath!], with: .left)
break;
add a comment |
my mistake was that on insert and update I referred to indexPath instead of newIndexPath...
it should be:
case .insert:
if newIndexPath != nil && (newIndexPath?.row)! < (controller.fetchedObjects?.count)!
tableView.insertRows(at: [newIndexPath!], with: .left)
break;
add a comment |
my mistake was that on insert and update I referred to indexPath instead of newIndexPath...
it should be:
case .insert:
if newIndexPath != nil && (newIndexPath?.row)! < (controller.fetchedObjects?.count)!
tableView.insertRows(at: [newIndexPath!], with: .left)
break;
my mistake was that on insert and update I referred to indexPath instead of newIndexPath...
it should be:
case .insert:
if newIndexPath != nil && (newIndexPath?.row)! < (controller.fetchedObjects?.count)!
tableView.insertRows(at: [newIndexPath!], with: .left)
break;
edited Nov 15 '18 at 9:28
answered Nov 15 '18 at 9:21
Aviram NetAviram Net
5,53942754
5,53942754
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53296926%2fnsfetchedresultscontroller-controller-didchange-delegate-assertion-failure%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Seems you’ve updated the data (model) via the controller but you’ve not updating the view. I would be useful to see your code in the delegate method
controllerDidChangeContent
to help identify the issue.– andrewbuilder
Nov 14 '18 at 10:23