Core Data: How to Fetch Objects for Timeline?
up vote
0
down vote
favorite
How do I handle fetching objects for a social timeline with core data?
Right now, every Post object returned from a network request is saved to core data. So, when a random user's profile is loaded, their posts are saved, which means they appear in the current user's timeline (even if they aren't followed by the current user).
My timeline, an NSFetchedResultsController pulls in all the saved posts, including those created by users the current user doesn't follow.
Should I only save posts that belong in the timeline to core data?
Or is there a way to store the timeline's list of core data objects to another location?
Here is my current setup:
@objc(Post)
public class Post: NSManagedObject {
static func findOrCreatePost(id: String, data: [String:Any], in context: NSManagedObjectContext) -> Post {
let request: NSFetchRequest<Post> = Post.fetchRequest()
if let id = data["_id"] as? String {
request.predicate = NSPredicate(format: "id = %@", id)
}
do {
let matches = try context.fetch(request)
if matches.count > 0 {
return matches[0]
}
} catch {
let error = error
print(error.localizedDescription)
}
let post = Post(context: context)
post.id = id
status.text = data["text"] as? String
...
PersistenceService.saveContext()
return post
}
class PersistenceService {
static var context: NSManagedObjectContext {
return persistentContainer.viewContext
}
static var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "AppName")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error (error), (error.userInfo)")
}
})
return container
}()
static func saveContext () {
let context = persistentContainer.viewContext
context.perform {
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
if context.hasChanges {
do {
try context.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error (nserror), (nserror.userInfo)")
}
}
}
}
}
swift core-data
add a comment |
up vote
0
down vote
favorite
How do I handle fetching objects for a social timeline with core data?
Right now, every Post object returned from a network request is saved to core data. So, when a random user's profile is loaded, their posts are saved, which means they appear in the current user's timeline (even if they aren't followed by the current user).
My timeline, an NSFetchedResultsController pulls in all the saved posts, including those created by users the current user doesn't follow.
Should I only save posts that belong in the timeline to core data?
Or is there a way to store the timeline's list of core data objects to another location?
Here is my current setup:
@objc(Post)
public class Post: NSManagedObject {
static func findOrCreatePost(id: String, data: [String:Any], in context: NSManagedObjectContext) -> Post {
let request: NSFetchRequest<Post> = Post.fetchRequest()
if let id = data["_id"] as? String {
request.predicate = NSPredicate(format: "id = %@", id)
}
do {
let matches = try context.fetch(request)
if matches.count > 0 {
return matches[0]
}
} catch {
let error = error
print(error.localizedDescription)
}
let post = Post(context: context)
post.id = id
status.text = data["text"] as? String
...
PersistenceService.saveContext()
return post
}
class PersistenceService {
static var context: NSManagedObjectContext {
return persistentContainer.viewContext
}
static var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "AppName")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error (error), (error.userInfo)")
}
})
return container
}()
static func saveContext () {
let context = persistentContainer.viewContext
context.perform {
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
if context.hasChanges {
do {
try context.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error (nserror), (nserror.userInfo)")
}
}
}
}
}
swift core-data
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
How do I handle fetching objects for a social timeline with core data?
Right now, every Post object returned from a network request is saved to core data. So, when a random user's profile is loaded, their posts are saved, which means they appear in the current user's timeline (even if they aren't followed by the current user).
My timeline, an NSFetchedResultsController pulls in all the saved posts, including those created by users the current user doesn't follow.
Should I only save posts that belong in the timeline to core data?
Or is there a way to store the timeline's list of core data objects to another location?
Here is my current setup:
@objc(Post)
public class Post: NSManagedObject {
static func findOrCreatePost(id: String, data: [String:Any], in context: NSManagedObjectContext) -> Post {
let request: NSFetchRequest<Post> = Post.fetchRequest()
if let id = data["_id"] as? String {
request.predicate = NSPredicate(format: "id = %@", id)
}
do {
let matches = try context.fetch(request)
if matches.count > 0 {
return matches[0]
}
} catch {
let error = error
print(error.localizedDescription)
}
let post = Post(context: context)
post.id = id
status.text = data["text"] as? String
...
PersistenceService.saveContext()
return post
}
class PersistenceService {
static var context: NSManagedObjectContext {
return persistentContainer.viewContext
}
static var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "AppName")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error (error), (error.userInfo)")
}
})
return container
}()
static func saveContext () {
let context = persistentContainer.viewContext
context.perform {
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
if context.hasChanges {
do {
try context.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error (nserror), (nserror.userInfo)")
}
}
}
}
}
swift core-data
How do I handle fetching objects for a social timeline with core data?
Right now, every Post object returned from a network request is saved to core data. So, when a random user's profile is loaded, their posts are saved, which means they appear in the current user's timeline (even if they aren't followed by the current user).
My timeline, an NSFetchedResultsController pulls in all the saved posts, including those created by users the current user doesn't follow.
Should I only save posts that belong in the timeline to core data?
Or is there a way to store the timeline's list of core data objects to another location?
Here is my current setup:
@objc(Post)
public class Post: NSManagedObject {
static func findOrCreatePost(id: String, data: [String:Any], in context: NSManagedObjectContext) -> Post {
let request: NSFetchRequest<Post> = Post.fetchRequest()
if let id = data["_id"] as? String {
request.predicate = NSPredicate(format: "id = %@", id)
}
do {
let matches = try context.fetch(request)
if matches.count > 0 {
return matches[0]
}
} catch {
let error = error
print(error.localizedDescription)
}
let post = Post(context: context)
post.id = id
status.text = data["text"] as? String
...
PersistenceService.saveContext()
return post
}
class PersistenceService {
static var context: NSManagedObjectContext {
return persistentContainer.viewContext
}
static var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "AppName")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error (error), (error.userInfo)")
}
})
return container
}()
static func saveContext () {
let context = persistentContainer.viewContext
context.perform {
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
if context.hasChanges {
do {
try context.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error (nserror), (nserror.userInfo)")
}
}
}
}
}
swift core-data
swift core-data
asked Nov 22 at 5:07
p3scobar
214
214
add a comment |
add a comment |
active
oldest
votes
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',
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%2f53424208%2fcore-data-how-to-fetch-objects-for-timeline%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2f53424208%2fcore-data-how-to-fetch-objects-for-timeline%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