Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 9 years ago.
Improve this question
i would like to know or maybe if someone can guide me what to do. for now im putting my mind on creating an app that gets the featured products on my website, using storyboard. where i click on products on my list in the tables view the it'll send me to next view to choose the product and when i click on the product and it'll go to another view where its details are written. i would know that it'll be done with parsing, or am i wrong.
its like, products --> products name list from web --> details
the interface and the tableview are already set, coding is just missing i just need to know where to begin.
Just a heads up, this question is far too broad for StackOverflow. You need to break this up and ask several smaller questions.
User Loads app, and it makes a request to your webserver asking for product list
(NSURLConnection)
Webserver receives request and sends encoded data back down. XML? JSON? Up to you.
(What software is running on your webserver? PHP? MySQL? Gather data and encode)
App Receives product data. Parse the encoding wrapper to get your object data.
(JSON or XML to NSDictionary, some good libraries available)
Populate data source with this data
Display data
If you have hundreds of products you'll probably need to reproduce this over and over, but that's up to you. If you only have a dozen or so it's probably easier to just send the whole chunk over on app startup.
Ace, if understand you correctly, the products itself should be fetched from the server. Then you can pick one or display the details. So, I would use a framework to connect and get the results from the server. There are things to consider: XML/JSON data parsing and mapping, Storing and caching the products, so you would be able to display them when there is no connections and updating with the latest changes. I am currently using RestKit which handles pretty much all of these things but for JSON. If you consider CoreData (database storage in iOS) you may need some additional help with retrieving the objects - MagicalRecord framework (on top of RestKit). It will handle things like findAll, findByAttribute:name: so you can get the objects you need. These frameworks are somewhat advanced, but on the other hand, they provide a sound ground for the UI stuff.
When you set up the backend integration and get your objects/collection of objects into the client, you can start populating the TableViews and displaying details.
One more thing to consider for a new project - CocoaPods. It is a very nice way to manage third-party libraries and frameworks. You just specify the libs you need and their versions (the good practice is to always specify the version, so the libs stay in sync) and it will fetch them and create a XCode workspace with them, so you don't have to worry about integrating them into the project. Both of the frameworks are there, just use
pods search <your_framework>
Good luck
Related
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 2 years ago.
Improve this question
I am newish to Swift/SwiftUI and have been reading a ton of resources. Using what I am learning along with another example app similar to what I am trying to create, I am making an app that downloads a JSON file from an external API service. That JSON data contains the main part of my code (items from a video game), and my app displays that data in various views. My question though is this: I want a user to be able to track a few things about each object, such as whether they have collected it. I have spent 2-3 weeks researching and trying various options of how to do this, but I am wondering what the most efficient/most popular way of doing something like this is in real-world apps?
Here are some things I have been considering:
Download the API JSON initially and then create both it and my collection data as one object. From there, I would persist that data either be encoding back to a JSON file to be stored in the app's documents directory or in Core Data (or even Realm). The views would actually pull from my own personal data. My first concern with this method is that the API JSON may have changes at some point and I would like the app to always have the most up-to-date version of that info (and I don't know how to compare for updated info yet). My second concern is why keep all of that extra info locally in my app when someone else is already hosting it (or should I do that anyway so the app can be used offline)? If that is the case, is there a tutorial or something around that shows how to manage downloaded JSON data without completely overwriting current data?
Download the API JSON as I currently am (every time a view needs it), and store the collection info as its own data. This is the method I think makes more sense, but my question is how do I combine it with the API JSON? Is it easiest to use JSON or Core Data to combine these files? Do I use the Combine framework? Are there other frameworks/methods that would be better suited for that?
To sum up:
My app downloads JSON files from an API containing items from a game that can be collected. I want the user to be able to track whether they have collected said items from that game. I don't know the best way to do this or what framework/classes I should be researching to do this. Any help would be greatly appreciated.
Warning: Most tutorials for CoreData and SwiftUI, FYI, both ignore MVVM (e.g., using #FetchRequest so your view directly reads your model) and the benefits of abstracting your persistence choice with a DataManager object and protocol. Doing the latter lets you choose CoreData now and switch to Google Firebase later (i.e., launching a collaborative Android version), without changing any View code or really any ViewModel code. You can follow the same principles with JSON decoding as just a different DataManger for initializing data for your ViewModel to apportion to views. Ok, done with soap box.
If your dataset is really big and you plan to query it sideways, CoreData may be nice. Or just a skill to learn. It's not that bad.
But if the use case is something simple like
Character 1
-- isStarredAsAwesome
-- copiesCollected
-- maxLevelofCopyCollected
-- dateCollected
Then just save JSON to the Bundle.
The benefit of CoreData is you could query relationships, such as get a brag sheet of which of my video game characters are in my friends library, but at a higher level and played for fewer hours but collected far in the past. In a large dataset, CoreData will be faster than looping over arrays yourself. But for a smaller dataset like yours may be, again, it may not matter really at all.
I'm building a note-taking app with lots of cross-ways uses of entered text. In this case, CoreData was easier than managing all those relationships in JSON, which makes the extra function calls to manage CoreData CRUD calls worth it.
Also, you may want to ship the JSON with your app and then call an updater on launch. This way, in case the API changes, your app isn't immediately broken until you get around to updating it.
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
I'm trying to create an app like uber, and I'm having trouble with the iphone to iphone connection. How am I to send a request to another Iphone, saying I am your driver! Am I to have riders become accepted, and add them to some database of riders in which drivers can see them? Basically I just want a little explanation on the ways I can use swift to connect iphones, any help is appreciated.
Looks like you've got a decently long way to go, but let's break this down.
Despite how it may seem, phones don't usually talk directly to each other. In these circumstances, an app will contact a central server in order to get information about things around them. The phone (in your situation) would likely contact the server and request a list of nearby drivers and locations. The server would then send a feed of nearby drivers and their locations so that the phone could display the locations of the drivers.
When you request a ride, your phone will tell the server its current location, and potentially the targeted location. A lot of work is done behind the scenes in the server to schedule a driver to pick you up. The server is keeping track of where a given driver is, how many other clients he has in queue, how long the driver would take to get to you, among many other factors. Once it figures out which driver would be best able to serve you, it will contact that driver and tell him to start moving toward you.
Then the server will contact you saying that it has found a driver, and then will send you the feed as to where that driver is in his progress to get you.
So to more directly answer your question, you'll need to start by setting up a server up to do a lot of the work behind the scenes. You can write a server backend in Swift using Vapor, but server-side swift is in its infancy. I'd also recommend looking into Ruby on Rails using the Ruby programming language, or Node.js using Javascript. But none of these are trivial matters.
Given the nature of your question, the problem you're attempting to solve is certainly a lot more difficult than you've anticipated. But don't let that stop you from asking questions like these.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
First I should confess that I am completely new to iOS programming and would like to get an answer for a question which I was googling all the day.
I would be having an app which will contain nearly about 500 images of png format with less size. How to store these images by categories inside the app? From what I learnt,
I can create a plist and map the images with strings (but not recommended by many if the data becomes huge)
creating a manual folder and storing the images (not sure how to do this..)
I have seen lots of codes on how to download and save the image from web or even from camera, but not sure what is the best way to store the in-app images which I have in hand in the app itself. Any sugggestions with sample code would be greatly helpful.
Are you downloading the images? Will these images ever change? Do you have a lot of metadata for each image (you mentioned storing them by categories).
While this is not the only way to implement it, I've had luck implementing things like this using a CoreData model that has an Image entity with category and filename as properties. You can store the images in the NSBundle or anywhere you like as long as they are in the same directory to make it easier on you. Then make sure each filename is unique and maps correctly to the CoreData entity.
This allows you to also at any time, allow more images to be sent down or even replace them. Once you download new images, you add new entities to your CoreData without you needing to update any plist or mapping. You also gain access to NSPredicates with the CoreData fetchRequest, which will allow you to query the CoreData for images that fall under 1 category or even several categories.
The downside is that it requires additional set-up, namely learning CoreData and implementing it into your project.
Edit:
For doing something right now and very basic, the answer is easy to implement. Add the folders into your directory and make sure they have the target/are getting in the bundle. From there, add a pList that for each category lists the filenames of every image you're interested in.
Then when in the app they click on a category, you pull the plist and get the list of names as either a dictionary/array. Then you load all the images.
The downside to this is that you have to manually update the plist for any new changes and send it down to the phone from a server.
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 9 years ago.
Improve this question
I am wondering if iOS has any build-in database, and if so - maybe you can direct me to some tutorials and/or API-description online ( similare to the JavaDocs ).
I am new to iOS and Objective-C programming. I have experience with Java and Android-development, and I am currently developing an Android-application for containing what CD's I have in my possession / collection - and want to re-produce it to iOS.
I have gotten stuck at the point at where I'm not sure how to save the information for the iOS-application. In Android you have an built-in database that you can use, and I stumbled upon an input ( here on StackOverflow ) a while back that someone wrote something about an SQLite-database and I would like to create an database first-time the application is run.
The alternative would be to save an file ( XML or JSON ) containing the information. But as the application is meant to handle large sums of information I want to use an database of some sort.
Thanks for all the possible help and directions to where I can find more information.
iOS has Core Data that works great in most of the cases. If you are used to Android's SQLite you can also use SQLite in iOS. Although, in general, people use Core Data.
XCode provides you a set of tools to work with Core Data. You can create a model inside XCode and see the relationship between Entities. Core data is not a relational database. It can be persisted in a relational database (SQLite) but the concept that supports Core Data is different. Core data is "an object graph manager with lifecycle" and you shouldn't fight against that concept. Try to understand the differences before dive into Core Data.
Dylan touched an important part. You also have wrappers and tools to help you with SQLite. One of them is FMDB.
For CoreData you also have a framework that can help you called MagicalRecord.
Yes, iOS come with built in core data feature. Here is the tutorial you can start with.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
I have an app that showcases paintings, the number of paintings is about 600 ( so thats 600 png's ). The client wants me to include those images in the app build, so that they are always available to view even if the user if not online. Of course with every image comes some fields like description, painter, and price estimate, so this app will not stream anything and will have all of its data locally.
Anyway I am thinking of the best way to build this app, I thought of core data, and even encoding decoding, but since These images wil never change, I can put them in an images folder and on viewdidload just loop over contents of the folder and build my tableviewcells.
my question is :
1 : Is this a good architecture?
2 : I need to associate those images with the relevant description of them? whats the best way of doing this? If I jump into core data and create models I feel this would be an overkill.
Keep in mind that these images will never change, nor will the data be updated.
Thanks.
A couple of thoughts:
As discussed in your other question, I think that loading all of these images in the app has its disadvantages, given that you say that the app ends up being 300mb. If it is, indeed, going to be larger than 50mb, then I think you might want try to dissuade your customer from insisting that all of the images be included in the app, itself. I understand that you might not be able to convince them, but at least make sure they understand the implication of including all of these images (that it makes it harder to install the app and therefore, they may experience a lower adoption rate of their new app).
Storing the relevant description of the images in Core Data is a good approach. You could also use SQLite (e.g., via the FMDB wrapper), but I'd really encourage you to just use Core Data unless you have some other considerations you haven't shared with us. But a lot of other traditional solutions for simplified persistent data (plists, NSUserDefaults, etc.) might not be appropriate for this many records. Core Data is great and really isn't that complicated. Sure, the first time you use Core Data, it takes a little getting used to, but it seems well suited for this amount of data.
You talk about "encoding and decoding" of the images, and you haven't described anything that would lead us to suggest that sort of process. What encoding/decoding are you contemplating? It's probably easier to just store the images in the local file system (in the bundle if included in the app, elsewhere in the file system if you're downloading the images on the fly).
You mention that you might have "viewDidLoad just loop over contents of the folder and build my tableviewcells". Perhaps I'm reading too much into this (in conjunction with your other question's comments about receiving memory warnings), but given that you are talking about keeping the images descriptions in Core Data, you don't need to be iterating through anything in viewDidLoad. Your UITableViewDataSource methods will simply query the Core Data database and present the appropriate information. I don't see any need to be iterating through anything in viewDidLoad.
I did a similar kind of application some time ago. I used unique code names for the images and created a Core Data DB that would have one column associating the according line of data (description, author, ...) with the "code" name of the image (i.e., 2347.png).
My model was something simple like this:
NSNumber *imageCode // the number that you would use to associate to your images
NSString *name
NSString *author
NSString *description
I'm assuming that you know how to use Core Data.. if you don't, you can refer to this website: Core Data on iOS 5 Tutorial: Getting Started .. it is really helpful!